我正在解析Collada file的动画。我已经绘制好动画了,但是现在的问题是如何设置纹理坐标。我将collada dae文件完全如何将其提供给OpenGL,但其映射完全错误。坐标范围是[0-1].
我需要重新整理吗?

如果我这样做,请向我解释如何进行。我尝试使用GL_LINEAR和GL_NEAREST,但无法解决问题。有什么想法吗?

我使用的模型是http://www.wazim.com/Collada_Tutorial_1.htm提供的AstroBoy和失忆症的Servant Grunt。

最佳答案

根据您的说法,事实证明它完全被映射为错误,我猜您没有考虑纹理索引值。我也有类似的问题(尽管有差异模型)。就像您可以拥有一个索引值数组一样,以便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 ....

前三个部分指示折点/法线/纹理坐标的值,但最后一个部分指示每个值的索引。请注意,第一个顶点索引是169,但第一个普通索引是0。实际上,普通索引是完全正常的,它们以“0..1..2..3”进行,但是顶点和纹理的索引到处都是!您必须按照Collada文件的格式来排序顶点和纹理值。

另一种方法是编写一个小程序来解析collada文件,并根据索引值将所有顶点,法线和UV值重新排列为正确的顺序。然后,您可以将问题直接输入到OpenGL中,而无需问任何问题。当然,这取决于您,要使用哪种方式。

(PS:如果您可以为Collada文件创建一个良好的解析器,那么'interleaved-indexing'实际上非常方便,即使不是,我发现这对Collada来说过于复杂了,但是您实际上无法做任何事情它。)

10-08 01:05