Note: You should use a material that has lighting and depth write turned off for this to behave correctly. See Displaying 2D Backgrounds for an example how to set up such a material programmatically.
Copy to clipboard
// Create a manual object for 2D ManualObject* manual = mSceneMgr->createManualObject("manual"); // Use identity view/projection matrices manual->setUseIdentityProjection(true); manual->setUseIdentityView(true); manual->begin("BaseWhiteNoLighting", RenderOperation::OT_LINE_STRIP); manual->position(-0.2, -0.2, 0.0); manual->position( 0.2, -0.2, 0.0); manual->position( 0.2, 0.2, 0.0); manual->position(-0.2, 0.2, 0.0); manual->index(0); manual->index(1); manual->index(2); manual->index(3); manual->index(0); manual->end(); // Use infinite AAB to always stay visible AxisAlignedBox aabInf; aabInf.setInfinite(); manual->setBoundingBox(aabInf); // Render just before overlays manual->setRenderQueueGroup(RENDER_QUEUE_OVERLAY - 1); // Attach to scene mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(manual);
Gives an outlined rectangle in the middle of the screen that is always visible.
Note: If you want to create empty manual object sections first and then later on fill those sections with geometry data, you need to initialise section with all the vertex components you intend to use (position, texture coordinate, normal etc.)
If you do not do this, uninitialised vertex components will be discarded later on when you try to update your manual object.
Copy to clipboard
// Create a manual object that is filled later on during the runtime manual->begin("UI/Element", Ogre::RenderOperation::OT_TRIANGLE_LIST); manual->position(x2, y2); manual->textureCoord(1, 1); manual->position(x2, y); manual->textureCoord(1, 0); manual->position(x, y); manual->textureCoord(0, 0); manual->end(); // Fill during the runtime normally // Texture coordinates will generated because they were present // in the buffer created by first call to end() manual->beginUpdate(sectionId); manual->position(x2, y2); manual->textureCoord(1, 1); manual->position(x2, y); manual->textureCoord(1, 0); manual->position(x, y); manual->textureCoord(0, 0); manual->end();
See also
Alias: ManualObject_2D