做这件事最好的方法是什么?谷歌已经向我展示了很多方法,但目前最好的方法是什么?我很乐意将模型从Maya导出并渲染到iPhone屏幕上,但如果有一种方法可以渲染它,然后支持收缩缩放等等,我会很兴奋的。
非常感谢,今天刚上完我的第一堂3D建模课,我很兴奋!
发布于 2011-01-13 09:23:52
好吧,除非有人有更好的方法,否则我关注了这篇文章:http://heikobehrens.net/2009/08/27/obj2opengl/。它涉及到将模型导出为.obj,然后通过Perl脚本运行它以将其转换为C结构的.h。
发布于 2011-02-25 23:39:06
我刚刚为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渲染循环中。如果这对你有帮助,请让我知道。
EDIT2:
为您澄清,如果您在文本编辑器中打开OBJ文件,它的布局是这样的:
list of vertices
list of texture coordinates
list of normals
list of faces并且faces列表以相同的顺序引用其他三个列表中的索引。例如,一行可能如下所示:
f 16/4/1 4/4/4 1/1/1这意味着面的第一个顶点引用顶点的索引16、纹理的索引4和法线的索引1。第二个索引引用顶点的索引4,纹理的索引4和法线的索引4,等等。然后你只需要解析这些面,并将正确的值从不同的数组中提取到一个浮点数组中,其中包含基于面索引的顶点和法线。
发布于 2011-01-13 09:52:30
查查盘古的人写的书。链接here。我不记得他的大脑是否显示了读取Maya或Alias的代码。无论如何,这是一本必读的书。
编辑他在第13章中展示了如何读取maya文件
https://stackoverflow.com/questions/4675475
复制相似问题