就是我需要在三维中,用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();