2014-12-26 65 views
0

我已經在我的Ogre程序中加載了一個實體。然後像下面那樣列出vertexDeclaration中的元素。VertexDeclaration不包含OGRE :: VES_DEFFUSE

Ogre::VertexDeclaration::VertexElementList lst = vertex_data->vertexDeclaration->getElements(); 

在列表中我只看到了VES_POSITION和VES_NORMAL。因此,當我運行下面的代碼,

const Ogre::VertexElement* posElem = vertex_data->vertexDeclaration->findElementBySemantic(Ogre::VES_DIFFUSE); 

posElem不包含任何內容或null。如何訪問這種不存在的元素?這是可能的嗎?那麼我已經添加了像下面的材料到我的實體。這次模型成功加載了材質和漫反射屬性。但問題依然存在。這意味着VertexDeclaration不包含具有VES_DEFFUSE語義的元素(僅VES_POSITION和VES_NORMAL)。另外我加載了一些其他模型,但他們中沒有一個具有VES_DEFFUSE語義的元素。

material base_mesh 
{ 

technique 
{ 
pass 
{ 
lighting on 
ambient 0.3 0.3 0.3 1 
diffuse 0.1 0.7 0.2 1 
emissive 0 0 0 1 


} 
} 
} 
+0

如果mesh沒有特定的屬性 - 它爲什麼會出現在運行時?你有什麼樣的網格數據和具體問題? – keltar

回答

0

我用OgreXmlConverter將我的網格文件轉換爲xml文件。然後編輯XML文件,並添加colour_diffuse標記每個頂點標籤像下面(例如):

<vertex> 
<position y="2.779611" x="0.272802" z="0.245147"/> 
<normal y="-0.291635" x="0.955870" z="0.034669"/> 
<colour_diffuse value="1 1 1 1" /></vertex> 
<vertex> 

然後轉換回目file.Now在VertexDeclaration我們VES_DEFFUSE語義元素。