簡體   English   中英

C ++ OpenGL錯誤的Collada紋理坐標

[英]C++ OpenGL Wrong Collada Texture Coordinates

我正在解析Collada file中的動畫。 我已經繪制好動畫了,但是現在的問題是如何設置紋理坐標。 我將collada dae文件提供給我的確切信息提供給OpenGL ,但其映射完全錯誤。 坐標范圍為[0-1].

我需要重新整理嗎?

如果我願意,請向我解釋如何進行。 我嘗試使用GL_LINEAR和GL_NEAREST,但不能解決問題。 有什么想法嗎?

我使用的模型是http://www.wazim.com/Collada_Tutorial_1.htm提供的AstroBoy和Amnesia 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來說過於復雜了,但是您實際上不能做任何事情它。)

不,我建議您閱讀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索引,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM