void Map::Render( Camera* View ) { Vector2 pts[4]; for( int y = 0; y < MapHeight; y++ ) { for( int x = 0; x < MapWidth; x++ ) { pts[0].X = x * CurGame->TileSize; pts[1].X = x * CurGame->TileSize; pts[2].X = (x + 1) * CurGame->TileSize; pts[3].X = (x + 1) * CurGame->TileSize; pts[0].Y = y * CurGame->TileSize; pts[1].Y = (y + 1) * CurGame->TileSize; pts[2].Y = y * CurGame->TileSize; pts[3].Y = (y + 1) * CurGame->TileSize; View->AbsoluteToCameraOffset( &pts[0], &pts[0] ); View->AbsoluteToCameraOffset( &pts[1], &pts[1] ); View->AbsoluteToCameraOffset( &pts[2], &pts[2] ); View->AbsoluteToCameraOffset( &pts[3], &pts[3] ); RenderGround( x, y, (Vector2*)&pts ); } } for( std::vector<Unit*>::iterator i = Units.begin(); i != Units.end(); i++ ) { Unit* u = (*i); u->Render( View ); } for(std::vector<Building*>::iterator i = Buildings.begin(); i != Buildings.end(); i++ ) { Building* b = (Building*)(*i); b->Render( View ); } }
void ModelViewerRender::Render() { if(!m_bInitilized) return ;//haven't initialized m_pDevice->getTimer()->tick(); // Work out a frame delta time. const double frameDeltaTime = m_pDevice->getTimer()->GetElapsedTime() / 1000.0; // Time in seconds m_pRenderDevice->setRenderDeviceTime(m_pDevice->getTimer()->getTime(), frameDeltaTime); // notify the model current frame changed if(m_pMF1FileResource!=NULL&&m_pDynamicModel!=NULL) CModelControlDlg::NotifyPlayFrameChanged((int)(m_pDynamicModel->getAnimPlayedTime()/ISGPInstanceManager::DefaultSecondsPerFrame)); m_pCamera->Update((float)frameDeltaTime); if(m_pDynamicModel!=NULL) m_pDynamicModel->update((float)frameDeltaTime); if(m_pStaticModel!=NULL) m_pStaticModel->update((float)frameDeltaTime); // update internal Camera position m_pRenderDevice->setViewMatrix3D( m_pCamera->GetRight(),m_pCamera->GetUp(),m_pCamera->GetDir(),m_pCamera->GetPos() ); // calculate fps CalFPS(frameDeltaTime); ModelViewerConfig* pConfig=ModelViewerConfig::GetInstance(); if(pConfig->m_bShowWireframe) glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); m_pRenderDevice->setClearColor(pConfig->m_BkgndColor[0],pConfig->m_BkgndColor[1],\ pConfig->m_BkgndColor[2],pConfig->m_BkgndColor[3]); m_pRenderDevice->beginScene(true,true,false); // render ground if(pConfig->m_bShowGround) RenderGround(); // render model if(pConfig->m_bShowMesh) { if(m_pDynamicModel!=NULL) m_pDynamicModel->render(); if(m_pStaticModel!=NULL) m_pStaticModel->render(); } // render boundingbox if(pConfig->m_bShowBoundingBox&&m_pModelMF1!=NULL) RenderBoundingBox(m_pModelMF1->m_MeshAABBox); // render bones if(pConfig->m_bShowBones) { if(m_pDynamicModel!=NULL) RenderBones(); } // render normals if(pConfig->m_bShowNormalLines) { if(m_pDynamicModel!=NULL) RenderDynamicNormals(); if(m_pStaticModel!=NULL) RenderStaticNormals(); } // render mesh box int meshcount=pConfig->m_bBoxShowVector.size(); for(int i=0;i<meshcount&&m_pModelMF1!=NULL;++i) { // render mesh box if(pConfig->m_bBoxShowVector[i]==TRUE) RenderBoundingBox(m_pModelMF1->m_pLOD0Meshes[i].m_bbox); } // render coordinate axis RenderCoordinateAxis(); // flush:draw objects m_pRenderDevice->FlushRenderBatch(); // render attachment if(pConfig->m_bShowAttachment&&m_pModelMF1!=NULL) RenderAttachments(); // render particle emitter if(pConfig->m_bShowParticleEmitter&&m_pModelMF1!=NULL) RenderParticleEmitter(); m_pRenderDevice->FlushEditorLinesRenderBatch(true); m_pRenderDevice->BeginRenderText(); RenderCoordinateLabel(); RenderFPS(); m_pRenderDevice->EndRenderText(); m_pRenderDevice->endScene(); }