//---------------------------------------------------------------------------------------------- void IDrawInterface::Draw() { DoDraw(); if (m_pCoreSDK->IsAEditor() && !m_pCoreSDK->IsAGame()) { DrawBounds(); //DrawController(); } }
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); }
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); }
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); }
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); }