Esempio n. 1
0
//----------------------------------------------------------------------------------------------
void IDrawInterface::Draw()
{
	DoDraw();

	if (m_pCoreSDK->IsAEditor() && !m_pCoreSDK->IsAGame())
	{
		DrawBounds();
		//DrawController();
	}
}
Esempio n. 2
0
void 
UniformGrid::Display(GraphicsWindow *gw)
{
	return;
	Matrix3 tm(1);
//	gw->setTransform(tm);
	DrawBounds(gw, bounds);

	float sx,sy,sz;
	float incx,incy,incz;

	sx = 0.0f;
	sy = bounds.pmin.y;
	sz = bounds.pmin.z;
	incx = 0.0f;
	incy = (bounds.pmax.y - bounds.pmin.y)/width;
	incz = (bounds.pmax.z - bounds.pmin.z)/width;


	int index =0;
	float x,y,z;

	sx = bounds.pmin.x;
	sy = 0.0f;
	sz = bounds.pmin.z;
	incx = (bounds.pmax.x - bounds.pmin.x)/width;
	incy = 0.0f;
	incz = (bounds.pmax.z - bounds.pmin.z)/width;


	index =0;
	z = sz;
	for (int i = 0; i < width; i++)
	{
		x = sx;
		y = 0.0;
		for (int j = 0; j < width; j++)
		{
			Box3 b;
			b.Init();
			Point3 p(x,y,z);
			b += p;
			p.x += incx;
			p.y += incy;
			p.z += incz; 
			b += p;

			if (yGrid[index]!=NULL)
				{
				if (index == whichLargestCell)
					{
					Point3 color (1.0f,0.0f,0.0f);
					gw->setColor(LINE_COLOR,color);
					}
				else
					{
					Point3 color (0.0f,1.0f,0.0f);
					gw->setColor(LINE_COLOR,color);
					}

				gw->marker(&b.Center(),CIRCLE_MRKR);
				DrawBounds(gw, b);
				}
			
			index++;
			x += incx;
		}
		z += incz;
	}

	gw->setColor(LINE_COLOR,GetUIColor(COLOR_SEL_GIZMOS));
	gw->marker(&debugP,BIG_BOX_MRKR);


	Point3 red (1.0f,0.0f,0.0f);

	gw->setColor(LINE_COLOR,red);
	gw->marker(&bounds.pmin,BIG_BOX_MRKR);
	Box3 cb;
	cb.Init();
	cb += bounds.pmin;
	cb.EnlargeBy(mRadius);
	DrawBounds(gw, cb);

}
Esempio n. 3
0
void
UniformGrid::Display(GraphicsWindow *gw)
{
	return;
	Matrix3 tm(1);
	gw->setTransform(tm);
	DrawBounds(gw, bounds);

	float sx,sy,sz;
	float incx,incy,incz;

	sx = 0.0f;
	sy = bounds.pmin.y;
	sz = bounds.pmin.z;
	incx = 0.0f;
	incy = (bounds.pmax.y - bounds.pmin.y)/width;
	incz = (bounds.pmax.z - bounds.pmin.z)/width;


	int index =0;
	float x,y,z;
	z = sz;
	for (int i = 0; i < width; i++)
	{
		x = 0.0;
		y = sy;
		for (int j = 0; j < width; j++)
		{
			Box3 b;
			b.Init();
			Point3 p(x,y,z);
			b += p;
			p.x += incx;
			p.y += incy;
			p.z += incz; 
			b += p;

			if (xGrid[index]->hit)
				{
				DrawBounds(gw, b);
				gw->marker(&b.Center(),ASTERISK_MRKR);

				}
			else DrawBounds(gw, b);
			index++;
			y += incy;
		}
		z += incz;
	}

	sx = bounds.pmin.x;
	sy = 0.0f;
	sz = bounds.pmin.z;
	incx = (bounds.pmax.x - bounds.pmin.x)/width;
	incy = 0.0f;
	incz = (bounds.pmax.z - bounds.pmin.z)/width;

/*
	index =0;
	z = sz;
	for (i = 0; i < width; i++)
	{
		x = sx;
		y = 0.0;
		for (int j = 0; j < width; j++)
		{
			Box3 b;
			b.Init();
			Point3 p(x,y,z);
			b += p;
			p.x += incx;
			p.y += incy;
			p.z += incz; 
			b += p;

			if (yGrid[index]->hit)
				{
				DrawBounds(gw, b);
				gw->marker(&b.Center(),CIRCLE_MRKR);

				}
			else DrawBounds(gw, b);
			index++;
			x += incx;
		}
		z += incz;
	}
*/
	gw->setColor(LINE_COLOR,GetUIColor(COLOR_SEL_GIZMOS));
	gw->marker(&debugP,BIG_BOX_MRKR);


	Point3 red (1.0f,0.0f,0.0f);

	gw->setColor(LINE_COLOR,red);
	gw->marker(&bounds.pmin,BIG_BOX_MRKR);
}
Esempio n. 4
0
void OpenGLDraw( HWND hWnd, const PorousModel& model, float zoom, float h_angle, float v_angle )
{
  //GLfloat trf[4][4];
  //
  //memset( trf, 0, sizeof(trf) );
  //
  //for( int i = 0; i < 3; ++i )
  //  trf[i][i] = 1.0f;
  //
  //for( int i = 0; i < 3; ++i )
  //{
  //   trf[0][i] = TrfMatrix[0][i];
  //   trf[1][i] = TrfMatrix[1][i];
  //   trf[2][i] = TrfMatrix[2][i];
  //   trf[i][3] = 0.0;
  //}
  //
  //// Coordinates of the center
  //trf[3][0] = 0.0;
  //trf[3][1] = 0.0;
  //trf[3][2] = 0.0;
  //trf[3][3] = 1.0;
  //
  //trf_x_pnt( trf, trf[3], trf[3] );
  //glMultMatrixf( (const GLfloat*)trf );

  SetOpenGLPerspective( hWnd, model );

  // как обычно указываем какие буферы будем чистить
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  // обнуляем текущую матрицу
  glLoadIdentity();

  float r = Length( model.GetSize() );
  float cos_vert = cos(v_angle);

  //FPoint eye( r*sin(h_angle)*cos_vert, r*sin(v_angle), r*cos(h_angle)*cos_vert );
  //FPoint up( 0.0f, cos_vert > 0 ? 1.0f : -1.0f, 0.0f );
  FPoint eye( 0, 0, r );
  FPoint up( 0.0f, 1.0f, 0.0f );
  FPoint center( 0.0f, 0.0f, 0.0f );
  gluLookAt( eye.x, eye.y, eye.z, center.x, center.y, center.z, up.x, up.y, up.z );

  glScalef( zoom, zoom, zoom );

  SetLighting( model );

  static const float koeff = (const float)(180.0f/M_PI);
  glRotatef( koeff*v_angle, 1.0f, 0.0f, 0.0f );
  glRotatef( -koeff*(M_PI/2+h_angle), 0.0f, 1.0f, 0.0f );

  glPushMatrix();

  DrawBounds( model );

  glPopMatrix();
  DrawModel( model );

  SwapBuffers(hDC);
}
Esempio n. 5
0
void Mesh::draw()
{

    //TODO: not get stuff out of Material and use, but tell Material to init instead
    UniformHandler *pUniformHandler = m_pMaterial->getUniformHandler();

    switch(m_eDrawMode)
    {
    case eNormal:
    {
        glBindBuffer(GL_ARRAY_BUFFER, m_gluBuffer);
        // activates all frame and material uniforms required for mesh
        if(!m_pMaterial->activate())
            ConsoleLog::inst().log("Material %s failed to activate",m_pMaterial->getName().c_str());

        dynamicArray<Uniform> *pdaMeshUniforms = m_pMaterial->getMeshUniforms();
        for(int i=0; i<pdaMeshUniforms->getSize(); i++)
        {
            pUniformHandler->CalculateMeshUniform((*pdaMeshUniforms)[i],m_psMesh, m_psNode);
        }
        if(m_pMaterial->getSkinned())
            DrawSkinned();
        else
            DrawMesh();
        m_pMaterial->deactivateArrays();

    }
    break;
    case eWireframe:
    {
        glBindBuffer(GL_ARRAY_BUFFER, m_gluBuffer);
        // activates all frame and material uniforms required for mesh
        if(!m_pMaterial->activate())
            ConsoleLog::inst().log("Material %s failed to activate",m_pMaterial->getName().c_str());

        dynamicArray<Uniform> *pdaMeshUniforms = m_pMaterial->getMeshUniforms();
        for(int i=0; i<pdaMeshUniforms->getSize(); i++)
        {
            pUniformHandler->CalculateMeshUniform((*pdaMeshUniforms)[i],m_psMesh);
        }
        DrawWireframeMesh();
        m_pMaterial->deactivateArrays();

    }
    break;
    case eWireframeNoFX:
    {
        glBindBuffer(GL_ARRAY_BUFFER, m_gluBuffer);
        // activates all frame and material uniforms required for mesh
        Material *pMaterial = m_pMaterial->getMaterialManager()->getFlatMaterial();
        if(!pMaterial->activate())
            ConsoleLog::inst().log("Material %s failed to activate",m_pMaterial->getName().c_str());

        dynamicArray<Uniform> *pdaMeshUniforms = pMaterial->getMeshUniforms();
        for(int i=0; i<pdaMeshUniforms->getSize(); i++)
        {
            pUniformHandler->CalculateMeshUniform((*pdaMeshUniforms)[i],m_psMesh);
        }
        DrawWireframeMesh();
        pMaterial->deactivateArrays();
    }
    break;
    case eNoFX:
    {
        glBindBuffer(GL_ARRAY_BUFFER, m_gluBuffer);
        // activates all frame and material uniforms required for mesh
        Material *pMaterial = m_pMaterial->getMaterialManager()->getFlatMaterial();
        if(!pMaterial->activate())
            ConsoleLog::inst().log("Material %s failed to activate",m_pMaterial->getName().c_str());

        dynamicArray<Uniform> *pdaMeshUniforms = pMaterial->getMeshUniforms();
        for(int i=0; i<pdaMeshUniforms->getSize(); i++)
        {
            pUniformHandler->CalculateMeshUniform((*pdaMeshUniforms)[i],m_psMesh);
        }
        DrawMesh();
        pMaterial->deactivateArrays();
    }
    break;
    case eBounds:	// always uses flat material so I can hardwire stuff
    {
        glBindBuffer(GL_ARRAY_BUFFER, m_gluBoundsBuffer);
        // activates all frame and material uniforms required for mesh
        Material *pMaterial = m_pMaterial->getMaterialManager()->getFlatMaterial();
        if(!pMaterial->activate())
            ConsoleLog::inst().log("Material %s failed to activate",m_pMaterial->getName().c_str());
        dynamicArray<Uniform> *pdaMeshUniforms = pMaterial->getMeshUniforms();
        for(int i=0; i<pdaMeshUniforms->getSize(); i++)
        {
            Uniform sUniform = (*pdaMeshUniforms)[i];
            if(sUniform.getSemantic()!=eUsPosition)
            {
                pUniformHandler->CalculateMeshUniform(sUniform,m_psMesh);
            }
            else
            {
                glVertexAttribPointer(sUniform.getLocation(), 3, GL_FLOAT, GL_FALSE, 0, NULL);
                glEnableVertexAttribArray(sUniform.getLocation());
            }
        }
        DrawBounds();
        pMaterial->deactivateArrays();
    }
    break;
    default:
    {
        ConsoleLog::inst().log("Unrecognised drawing mode\n");
    }
    }

}
//from ViewportDisplayCallback
void SnapPivot_Mode::Display(TimeValue t, ViewExp *vpt, int flags)
{
	if (!vpt || !vpt->IsAlive())
	{
		// why are we here
		DbgAssert(!_T("Invalid viewport!"));
		return;
	}

	GraphicsWindow *gw = vpt->getGW();
	int savedLimits;
	gw->setRndLimits((savedLimits = gw->getRndLimits()) & (~GW_ILLUM) & GW_Z_BUFFER);
	gw->setTransform(mMeshTM);

	//draw mesh preview hight light
	if ((mProc.mPreviewSubLevel >= 1) && (mProc.mPreviewSubLevel <= 3) && (mPreviewMesh!=nullptr))
	{
		gw->setColor(ColorType::LINE_COLOR, mMeshPreviewColor);
		if (mProc.mPreviewSubLevel == 1)
		{
			Point3 p = mPreviewMesh->v[mProc.mPreviewSubIndex].p;
			gw->startMarkers();
			gw->marker(&p, MarkerType::CIRCLE_MRKR);
			gw->endMarkers();
		}
		else if (mProc.mPreviewSubLevel == 2)
		{
			int a = mPreviewMesh->e[mProc.mPreviewSubIndex].v1;
			int b = mPreviewMesh->e[mProc.mPreviewSubIndex].v2;
			Point3 p[3];
			p[0] = mPreviewMesh->v[a].p;
			p[1] = mPreviewMesh->v[b].p;
			gw->startSegments();
			gw->segment(p, 1);
			gw->endSegments();
		}
		else if (mProc.mPreviewSubLevel == 3)
		{
			MNFace& f = mPreviewMesh->f[mProc.mPreviewSubIndex];
			int deg = f.deg;
			Point3 p[3];
			gw->startSegments();			
			for (int i = 0; i < deg; i++)
			{
				int index1 = f.vtx[i];
				int index2 = f.vtx[0];
				if (i < deg - 1)
					index2 = f.vtx[i+1];
				p[0] = mPreviewMesh->v[index1].p;
				p[1] = mPreviewMesh->v[index2].p;
				gw->segment(p, 1);
			}
			gw->endSegments();
		}
	}

	{
		Point3 p[3];
		p[0] = mProc.mHitOnSurface;
		p[1] = mProc.mHitOnSurface + (mProc.mLastNormal * mSize * 0.1f);
		gw->startMarkers();
		gw->marker(p, MarkerType::DOT2_MRKR);
		gw->endMarkers();

		gw->startSegments();
		gw->segment(p, 1);
		gw->endSegments();
	}


	Point3 hp;
	DrawBounds(vpt, false, false,hp);

	gw->setTransform(mSnapTM);
	float dist = 0.0f;
	

	//draw the transform handles
	DrawAxis(vpt, 0, mSize, false, false, dist);
	DrawAxis(vpt, 1, mSize, false, false, dist);
	DrawAxis(vpt, 2, mSize, false, false, dist);

	//draw the transform planes
	//draw the rotate handles
	DrawAxisLock(vpt, 0, mSize, false, false, dist);
	DrawAxisLock(vpt, 1, mSize, false, false, dist);
	DrawAxisLock(vpt, 2, mSize, false, false, dist);


	//draw the scale handles

	//draw the center hit
	DrawCenter(vpt, mSize, false, false, dist);

	gw->setRndLimits(savedLimits);

}