我正在使用 C++/OpenGL 上的 3d 地图生成器平台,在完成 Perlin 的噪声之后,我需要将一些 3d 模型加载到我的屏幕中。在阅读它之前和之后我从未尝试过它,我决定使用 COLLADA 的模型格式。我做的第一件事是通过 TinyXML 读取 XML 文件并将其转换为我的代码中可理解的类。我可以毫无问题地访问所有内容。到目前为止一切都很好,但是当我尝试在 3d 静态模型中正确转换 XML 信息时,问题出现了。我阅读了很多关于的教程,但我认为我没有抓住 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”并获取浮点值
4 - 之后,我开始循环遍历从三到三的“p”值(根据“technique_common”),分别获取位于源浮点值内的顶点 X、Y 和 Z 的索引。例如,代码的作用 =>
- 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}
显然我做错了什么,因为我无法得到一个简单的球体。