就是我需要在三维中,用ManualObject中将文字的纹理图片贴图到三维实体中。
做完发现不难,但是找的时候犯傻了,所以查了很多资料,⊙﹏⊙b汗。
这个中文的网页里,还真没有人怎么实现的。可能先太容易了?
1、字体文件是TTF,文件大小足够大,所以包含中文了。
2、文字需要载入,这个有时间写个blog吧。如果不载人,光添加时没有文字图像的。
3、基本实现代码如下:
//获得文字的 Material,这里是fontMaterial Ogre::Font* font = (Ogre::Font*)Ogre::FontManager::getSingleton().getByName("ChineseFont","General").get(); Ogre::MaterialPtr fontMaterial = font->getMaterial(); //不用拷贝也可以,我当时肯定什么做错了。 //Ogre::MaterialPtr matClone = fontMaterial->clone("newFontMaterial"); Ogre::String matName = fontMaterial->getName(); std::wstring text = L"天天都快乐!";//中文必须用std::wstring Ogre::Font::CodePoint codePoint = *(text.c_str());//第一个文字转换成Ogre::Font::CodePoint码 Ogre::Font::UVRect uvRect = font->getGlyphTexCoords(codePoint);//重点是这个,获得该文字的图片UV //Ogre::Font::GlyphInfo glyphInfo = font->getGlyphInfo(codePoint); //这个Ogre::Font::GlyphInfo 里面包含Ogre::Font::UVRect,所以也可以使用。 Ogre::ManualObject* manualObject = sceneManager->createManualObject(); sceneManager->getRootSceneNode()->createChildSceneNode()->attachObject(manualObject); manualObject->begin(matName,Ogre::RenderOperation::OT_TRIANGLE_LIST); //将 uvRect中的UV添加到对应的点位置就可以了 //感觉有点奇怪?有时间,再弄好点吧。先记录一下。 manualObject->position(0,5,0); manualObject->textureCoord(uvRect.left,uvRect.top); manualObject->position(5,5,0); manualObject->textureCoord(uvRect.right,uvRect.top); manualObject->position(5,0,0); manualObject->textureCoord(uvRect.right,uvRect.bottom); manualObject->position(0,0,0); manualObject->textureCoord(uvRect.left,uvRect.bottom); manualObject->triangle(0,1,2); manualObject->triangle(0,2,1); manualObject->triangle(0,2,3); manualObject->triangle(0,3,2); manualObject->end();