3

做这个的最好方式是什么?谷歌搜索向我展示了很多方法,但目前最好的方法是什么?我很高兴能从 Maya 导出模型并在 iPhone 屏幕上渲染,但如果有办法渲染它,然后支持捏缩放等,我会很兴奋。

非常感谢,今天刚完成我的第一个 3D 建模课程,我很兴奋!

4

4 回答 4

5

我刚刚为 iPhone 和 iPad 编写了一个功能齐全的模型查看器和操纵器。基本上,我只是编写了自己的文件解析器来存储顶点数组,然后在我的渲染循环中我只渲染数组。尽管二进制文件的读取速度比 .obj 文件快得多,但这样做相当简单。这样,您可以打开任何文件,而不仅仅是您“处理”的文件。互联网上也有很多例子。

编辑:

只需将您的顶点放入一个紧密排列的数组中:

vertexX, vertexY, vertexZ, normalX, normalY, normalZ

这样你就有了一个一维浮点数组,但是像上面一样映射出来。一旦你有了一个浮点数组,渲染就很简单了。

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
        
glVertexPointer(3, GL_FLOAT, sizeof(vertices[0])*6, &vertices[0]);
glNormalPointer(GL_FLOAT, sizeof(vertices[0])*6, &vertices[3]);
        
glColor4f(R, G, B, 1); //range 0-1
glDrawArrays(GL_TRIANGLES, 0, numVertices); //number of floats in array divided by 6
        
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);

然后把它放在你的 OpenGL-ES 1.1 渲染循环中。让我知道这是否适合您。

编辑2:

为您澄清一下,如果您在文本编辑器中打开 OBJ 文件,它的布局如下:

list of vertices
list of texture coordinates
list of normals
list of faces

并且面列表以相同的顺序引用其他三个列表中的索引。例如,一行可能如下所示:

f 16/4/1  4/4/4  1/1/1

表示面的第一个顶点引用顶点索引 16、纹理索引 4 和法线索引 1。第二个索引引用顶点索引 4、纹理索引 4 和法线索引 4 等。然后您只需要解析面并将不同数组中的正确值提取到包含顶点和法线的单个浮点数组中面指数。

于 2011-02-25T15:39:06.003 回答
1

检查Pangea家伙的书。链接在这里。我不记得他 [Brain] 是否显示了读取 Maya 或 Alias 的代码。无论如何,这是必须阅读的。

[编辑] 他在第 13 章中展示了如何读取 Maya 文件

于 2011-01-13T01:52:30.297 回答
0

好吧,除非有人有更好的方法,否则我关注了这篇文章:http ://heikobehrens.net/2009/08/27/obj2opengl/ 。它涉及将模型导出为 .obj,然后通过 Perl 脚本运行它以将其转换为 C 结构的 .h。

于 2011-01-13T01:23:52.200 回答
0

你也可以使用unity3dcocos3d

于 2013-07-12T13:44:49.747 回答