void CEngine::MoveableText() { Ogre::Entity* ent1 = m_sceneMgr->createEntity("robot1", "robot.mesh"); Ogre::SceneNode* node1 = m_sceneMgr->getRootSceneNode()->createChildSceneNode(); node1->attachObject(ent1); Ogre::Entity* ent2 = m_sceneMgr->createEntity("robot2", "robot.mesh"); Ogre::SceneNode* node2 = m_sceneMgr->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(100,0,100)); node2->attachObject(ent2); Ogre::Vector3 Center1 = node1->getPosition(); Ogre::Vector3 Center2 = node2->getPosition(); //create labels for each node... Ogre::SceneNode* lableNode1 = m_sceneMgr->getRootSceneNode()->createChildSceneNode("robot 1"); Ogre::MovableText* lable1 = new Ogre::MovableText("label 1", "robot 1", "BlueHighway", 1.0, Ogre::ColourValue::Black); lable1->setTextAlignment(Ogre::MovableText::H_CENTER, Ogre::MovableText::V_ABOVE); lable1->setColor(Ogre::ColourValue::Blue); lable1->setAdditionalHeight(2.0); lable1->setCastShadows(false); lableNode1->attachObject(lable1); Ogre::AxisAlignedBox box1 = ent1->getBoundingBox(); Ogre::Vector3 pos1; pos1.x = Center1.x; pos1.y = Center1.y + box1.getSize().y; pos1.z = Center1.z; lableNode1->setPosition(pos1); Ogre::SceneNode *LabelNode2 = m_sceneMgr->getRootSceneNode()->createChildSceneNode("Robot 2"); Ogre::MovableText *Label2 = new Ogre::MovableText("Label 2", "Robot 2", "BlueHighway", 1.0, Ogre::ColourValue::Black); Label2->setTextAlignment(Ogre::MovableText::H_CENTER, Ogre::MovableText::V_ABOVE); Label2->setColor(Ogre::ColourValue::Blue); Label2->setAdditionalHeight(2.0); LabelNode2->attachObject(Label2); Ogre::AxisAlignedBox box2 = ent2->getBoundingBox(); Ogre::Vector3 pos2; pos2.x = Center2.x; pos2.y = Center2.y + box2.getSize().y; pos2.z = Center2.z; LabelNode2->setPosition(pos2); //create a line from one robot label... Ogre::ManualObject *Measure = m_sceneMgr->createManualObject("Measure"); Measure->begin("BumpyMetal", Ogre::RenderOperation::OT_LINE_LIST); Measure->position(Center1); Measure->position(Center2); Measure->end(); Ogre::SceneNode* MeasureNode = m_sceneMgr->getRootSceneNode()->createChildSceneNode("Measure"); MeasureNode->attachObject(Measure); //add a label at the mid-point of the line between robots.. Ogre::Real distance = Center2.distance(Center1); char dimension[20]; sprintf(dimension, "%.2f", distance); Ogre::SceneNode* measureTextNode = m_sceneMgr->getRootSceneNode()->createChildSceneNode("measureText"); Ogre::MovableText* measureText = new Ogre::MovableText("measure", dimension, "BlueHighway", 1.0, Ogre::ColourValue::Black); measureText->setTextAlignment(Ogre::MovableText::H_CENTER, Ogre::MovableText::V_ABOVE); MeasureNode->attachObject(measureText); MeasureNode->setPosition(0.5 * (Center1 + Center2)); }
1.将OgreMovableText.h和OgreMovableText.cpp记得加入工程;
2.BlueHighway字体默认是没有的,需要自己添加:
BlueHighway
{
type truetype
source bluehigh.ttf
size 16
resolution 96
}
加入E:\Ogre\ogre_src_v1-8-0\Samples\Media\fonts\sample.fontdef