我正在为动画解析Collada file
。我绘制它和动画很好,但现在的问题是如何设置纹理坐标。我把它提供给OpenGL
collada dae文件给我的确切方法,但它的映射完全错误。坐标范围为[0-1].
我必须重新排列吗?
如果我这样做,请向我解释如何去做。我尝试使用GL_LINEAR和GL_NEAREST,但它没有解决问题。有什么想法吗?
我使用的模型是http://www.wazim.com/Collada_Tutorial_1.htm给出的AstroBoy和Amnesia Servant Grunt。
答案 0 :(得分:3)
根据你所说的完全错误映射的方式,我猜你还没有考虑到纹理索引值。我也有类似的问题(尽管有不同的模型)。就像你可以有一个索引值数组,以便OpenGL知道绘制顶点的顺序,所以Collada分配UV索引值(和正常的索引值),并且,令人讨厌的是,它们永远不会是相同的顺序。以下列Collada示例为例:
<source id="Box001-POSITION">
<float_array id="Box001-POSITION-array" count="1008">
-167.172180 -193.451920 11.675772
167.172180 -193.451920 11.675772 .....
....
....
<source id="Box001-Normal0">
<float_array id="Box001-Normal0-array" count="5976">
-0.000000 -0.025202 -0.999682
-0.000000 -0.025202 -0.999682 .....
....
....
<source id="Box001-UV0">
<float_array id="Box001-UV0-array" count="696">
0.000000 0.000000
1.000000 0.000000
0.000000 1.000000 .....
....
....
<triangles count="664" material="_13 - Default">
<input semantic="VERTEX" offset="0" source="#Box001-POSITION"/>
<input semantic="NORMAL" offset="1" source="#Box001-Normal0"/>
<input semantic="TEXCOORD" offset="2" set="0" source="#Box001-UV0"/>
<p> 169 0 171 170 1 172 171 2 173 171 3
173 168 4 170 169 5 171 173 6 175 174
7 176 175 8 177 175 9 177 172 10 174 173 11 175 108 ....
前三个部分表示verticies / normals / texture-coords的值,但最后一部分表示每个值的索引。注意第一个顶点索引是169,但第一个正常索引是0.实际上,正常指标是完全正常的,它们会进展为&#34; 0..1..2..3&#34;但是顶点和纹理的标记到处都是!您必须按照Collada文件指定的方式对顶点和纹理值进行排序。
另一种方法是编写一个小程序来解析collada文件,并根据索引值将所有顶点,法线和UV值重新排列为正确的顺序。然后,您可以直接将您的积分直接输入OpenGL,不会出现任何问题。当然,这取决于你想要处理它的方式。
(PS:如果你能为Collada文件做一个好的解析器,那么交错索引实际上非常方便,如果不是,我发现它对Collada&#39;过度复杂。部分,但你真的无能为力。)
答案 1 :(得分:1)
不,我建议你阅读一些关于collada的基本知识。
<triangles count="664" material="_13 - Default">
<input semantic="VERTEX" offset="0" source="#Box001-POSITION"/>
<input semantic="NORMAL" offset="1" source="#Box001-Normal0"/>
<input semantic="TEXCOORD" offset="2" set="0" source="#Box001-UV0"/>
<p> 169 0 171 170 1 172 171 2 173 171 3......
169是三角形的第一个点索引,0是第一个普通索引,171是第一个texcoord索引,依此类推。