私は C++/OpenGL で 3D マップ ジェネレーター プラットフォームに取り組んでおり、Perlin の Noise で仕上げた後、いくつかの 3D モデルを画面にロードする必要がありました。以前に試したことはありませんでしたが、それについて読んだ後、COLLADA のモデル形式を使用することにしました。私が最初にしたことは、TinyXML を介して XML ファイルを読み取り、それをコード内の理解可能なクラスに変換することでした。問題なくすべてにアクセスできます。ここまでは順調でしたが、XML の情報を 3D 静的モデルに適切に変換しようとしたときに問題が発生しました。私は多くのチュートリアルを読みましたが、COLLADA の「本質」を理解していなかったと思い、ここで助けを求めています。私の「.dae」ファイルは、Blender で作成された単純な球で構成されています。私が何をするかは問題ではありません。
http://s2.postimg.org/4fdz2fpl4/test.jpg
確かに私は正しい座標をとっていないか、少なくとも正しく実装していません。 これがまさに私がテストしている COLLADA ファイルです。要するに、私がやっていることは次のとおりです。
1 - 最初に「polylist」にアクセスし、「p」の値を取得します。この場合、セマンティックが VERTEX である ID (この場合は「ID2-mesh-vertices」) も取得します。
2 - 「頂点」にアクセスし、セマンティックが POSITION であるソース ID を取得します。この場合は「#ID2-mesh-positions」です。
3 - ソース「#ID2-mesh-positions」にアクセスし、float 値を取得します
4 - その後、ソースの float 値内にある頂点 X、Y、Z のインデックスをそれぞれ取得するために、3 から 3 までの「p」値をループし始めました (「technique_common」に従って)。たとえば、コードが何をするか =>
- 0 0 1 = {X -> 0.4330127;Y -> 0.4330127; Z -> 0.25}
- 1 2 2 = {X -> 0.25;Y -> 0; Z -> 0}
- 1 1 0 = {X -> 0.25;Y -> 0.25; Z -> 0.4330127}
単純な球を取得できないため、明らかに私は非常に間違ったことをしています。