首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ OpenGL错误的Collada纹理坐标

C++ OpenGL错误的Collada纹理坐标
EN

Stack Overflow用户
提问于 2013-01-17 06:49:16
回答 2查看 1.2K关注 0票数 2

我正在解析动画的Collada file。我有它绘制和动画很好,但现在的问题是如何设置纹理坐标。我完全按照collada dae文件提供给我的方式将其提供给OpenGL,但它的映射完全错误。坐标的范围从[0-1].开始

我需要重新安排吗?

如果我这样做了,请向我解释一下如何去做。我尝试使用GL_LINEAR和GL_NEAREST,但没有解决问题。你知道为什么吗?

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

EN

回答 2

Stack Overflow用户

发布于 2013-01-17 07:02:50

基于你所说的,它被证明是完全错误的映射,我猜你没有考虑纹理索引值。我也有类似的问题(尽管使用的是不同的模型)。就像你可以有一个索引值数组,这样OpenGL就知道绘制垂直的顺序,所以Collada会分配UV索引值(和正常索引值),而且,令人恼火的是,它们从来都不是相同的顺序。以下面的Collada示例为例:

代码语言:javascript
复制
<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中,不会有任何问题。当然,这取决于你想要用什么方式来处理它。

(注:如果你能为Collada文件做一个很好的解析器,那么“交错索引”实际上是相当方便的,如果不能的话,我发现它对Collada来说过于复杂了,但你真的无能为力。)

票数 3
EN

Stack Overflow用户

发布于 2013-01-25 13:31:15

不,我建议你阅读一些关于collada的基本知识。

代码语言:javascript
复制
 <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索引,依此类推。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14369349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档