c++ OpenGL错误的Collada纹理坐标



我正在解析动画的Collada file。我已经把它画好并动画化了,但现在的问题是如何设置纹理坐标。我把它提供给OpenGL完全如何collada dae文件给我,但它的映射完全错误。坐标范围从[0-1].

我必须重新排列吗?

如果我这样做了,请告诉我该怎么做。我尝试使用GL_LINEAR和GL_NEAREST,但它不能解决问题。知道为什么吗?

我使用的模型是http://www.wazim.com/Collada_Tutorial_1.htm提供的阿童木和失忆仆人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.."但是垂直和纹理的索引到处都是!你必须按照Collada文件指定的方式来排序你的顶点和纹理值。

另一种方法是编写一个小程序来解析collada文件,并根据索引值将所有顶点、法线和UV值重新排列成正确的顺序。然后你可以把你的点直接输入OpenGL,没有任何问题。当然,这取决于你,你想用哪种方式来处理它。

(PS:如果你可以为Collada文件做一个好的解析器,那么'交错索引'实际上是非常方便的,如果不是,我发现它在Collada的部分过于复杂,但你真的不能做任何事情。)

不,我建议你读一些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为第一个文本索引,依此类推

最新更新