// util //--------------------------------------------------------------------------------------------------------------- ManualObject* App::Create2D(const String& mat, Real s, bool dyn) { ManualObject* m = mSceneMgr->createManualObject(); m->setDynamic(dyn); m->setUseIdentityProjection(true); m->setUseIdentityView(true); m->setCastShadows(false); m->estimateVertexCount(4); m->begin(mat, RenderOperation::OT_TRIANGLE_STRIP); m->position(-s,-s*asp, 0); m->textureCoord(0, 1); m->position( s,-s*asp, 0); m->textureCoord(1, 1); m->position(-s, s*asp, 0); m->textureCoord(0, 0); m->position( s, s*asp, 0); m->textureCoord(1, 0); m->end(); //TODO:replace OT_TRIANGLE_FAN with a more friendly version for D3D11 as it is not supported /* m->estimateVertexCount(6); m->begin(mat, RenderOperation::OT_TRIANGLE_LIST); m->position(-s,-s*asp, 0); m->textureCoord(0, 1); m->position( s,-s*asp, 0); m->textureCoord(1, 1); m->position( s, s*asp, 0); m->textureCoord(1, 0); m->position(-s, s*asp, 0); m->textureCoord(0, 0); m->position(-s,-s*asp, 0); m->textureCoord(0, 1); m->position( s, s*asp, 0); m->textureCoord(1, 0); m->end(); */ AxisAlignedBox aabInf; aabInf.setInfinite(); m->setBoundingBox(aabInf); // always visible m->setRenderQueueGroup(RQG_Hud2); return m; }
Entity* DualGridGenerator::getDualGrid(SceneManager *sceneManager) { if (!mDualGrid && mDualCells.size() > 0) { ManualObject* manual = sceneManager->createManualObject(); manual->begin("BaseWhiteNoLighting", RenderOperation::OT_LINE_LIST); manual->colour((Real)0.0, (Real)1.0, (Real)0.0); manual->estimateVertexCount(mDualCells.size() * 8); manual->estimateIndexCount(mDualCells.size() * 24); uint32 baseIndex = 0; for (VecDualCell::iterator it = mDualCells.begin(); it != mDualCells.end(); ++it) { MeshBuilder::addCubeToManualObject( manual, it->mC0, it->mC1, it->mC2, it->mC3, it->mC4, it->mC5, it->mC6, it->mC7, baseIndex); } manual->end(); mDualGridI++; StringUtil::StrStreamType meshName; meshName << "VolumeDualGridGridMesh" << mDualGridI; manual->convertToMesh(meshName.str()); StringUtil::StrStreamType entityName; entityName << "VolumeDualGrid" << mDualGridI; mDualGrid = sceneManager->createEntity(entityName.str(), meshName.str()); } return mDualGrid; }
ManualObject* CHud::Create2D(const String& mat, SceneManager* sceneMgr, Real s, // scale pos bool dyn, bool clr, Real mul, Vector2 ofs, uint32 vis, uint8 rndQue, int cnt) { ManualObject* m = sceneMgr->createManualObject(); m->setDynamic(dyn); m->setUseIdentityProjection(true); m->setUseIdentityView(true); m->setCastShadows(false); m->estimateVertexCount(cnt * 4); m->begin(mat, cnt > 1 ? RenderOperation::OT_TRIANGLE_LIST : RenderOperation::OT_TRIANGLE_STRIP); const static Vector2 uv[4] = { Vector2(0.f,1.f),Vector2(1.f,1.f),Vector2(0.f,0.f),Vector2(1.f,0.f) }; for (int i=0; i < cnt; ++i) { m->position(-s,-s*asp, 0); m->textureCoord(uv[0]*mul + ofs); if (clr) m->colour(0,1,0); m->position( s,-s*asp, 0); m->textureCoord(uv[1]*mul + ofs); if (clr) m->colour(0,0,0); m->position(-s, s*asp, 0); m->textureCoord(uv[2]*mul + ofs); if (clr) m->colour(1,1,0); m->position( s, s*asp, 0); m->textureCoord(uv[3]*mul + ofs); if (clr) m->colour(1,0,0); } if (cnt > 1) for (int i=0; i < cnt; ++i) { int n = i*4; m->quad(n,n+1,n+3,n+2); } m->end(); AxisAlignedBox aabInf; aabInf.setInfinite(); m->setBoundingBox(aabInf); // always visible m->setVisibilityFlags(vis); m->setRenderQueueGroup(rndQue); //RQG_Hud2 return m; }