2012-10-06 132 views
0

我在.OBJ文件中有一个人体模型,我想用三角形显示网格。没有纹理。我还希望能够移动,缩放和3D旋转。iOS OpenGL ES绘制网格线框

第一个工作选项是使用数学手动将顶点投影到2D,然后用Quartz 2D绘制它们。这是有效的,因为我知道透视投影的基本数学概念。

但是,我想使用OpenGL ES的那种方法,但我不知道如何绘制三角形。

例如,代码 - (空)的drawRect:(的CGRect)矩形是:

glClearColor(1,0,0,0); 
glClear(GL_COLOR_BUFFER_BIT); 
GLKBaseEffect *effect = [[GLKBaseEffect alloc] init]; 
[effect prepareToDraw]; 
glEnable(GL_DEPTH_TEST); 
glEnable(GL_CULL_FACE); 

现在怎么办?我有顶点位置(每个顶点3辆花车)和三角形索引数组的数组,所以我想这:

glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, numVertices,pVertices); 
glDrawElements(GL_TRIANGLES, numTriangles, GL_UNSIGNED_INT,pTriangles); 

但这并不显示任何东西。我从示例中看到glEnableVertexAttribArray(GLKVertexAttribPosition)和glDrawArrays的用法,但我不确定如何使用它们。

我也明白,使用ES渲染线框是不可能的?所以我必须将颜色属性应用到顶点。没关系,但在此之前,三角形必须先显示。

+0

http://gamedev.stackexchange.com/ – axis

+0

@axis我无法以任何方式看到这与游戏开发有何关系。 gamedev.se不是任何与图形相关的转储。 –

+0

@ChristianRau OpenGL是一种渲染技术,不仅仅适用于“图形”,而且可能是Gamedev的最佳选择。 – axis

回答

1

我要问的第一件事是:你的顶点在哪里? OpenGL(ES)绘制了一个从(-1,-1,-1)到(1,1,1)的坐标空间,所以你可能想用投影矩阵来转换你的点以使它们进入该空间。要了解投影矩阵和iOS上更多的OpenGL ES 2.0的基础知识,我建议找一本书或一本教程。 This one's not badhere's another that's specific to GLKit

使用OpenGL在drawRect:中绘图可能不是您想要做的事。如果你已经使用GLKit,为什么不使用GLKView?如果您使用“OpenGL Game”模板创建新的Xcode项目,那么有很好的示例代码可以帮助您入门。

当您熟悉GL时,您会发现OpenGL ES中不存在的功能glPolygonMode通常用于桌面OpenGL的线框图。但是,根据顶点数据的组织方式,您可能可以通过GL_LINESGL_LINE_LOOP获得像样的线框。或者因为您使用GLKit,您可以跳过线框并使用GLKBaseEffect轻松设置一些灯光和阴影。

+0

你从哪里得到坐标空间从-1扩展到1的想法?我很确定GL的坐标至少从MIN_INT到MAX_INT。当然,从-10到10的网格渲染几个立方体是一个简单的模式,并且看到它们都很明显。 – Olie

+1

[管道](http://www.songho.ca/opengl/gl_transform。中的最后一个步骤之一。html)是标准化设备坐标的转换,它在所有三个轴上从-1扩展到1。如果您尚未设置投影([GLKit方式])(http://developer.apple.com/library/ios/documentation/GLkit/Reference/GLKEffectPropertyTransform_ClassRef/Reference/Reference.html#//apple_ref/doc/ c_ref/GLKEffectPropertyTransform)或其他方法)将顶点从其他一些坐标空间转换为该顶点,则无法在该立方体外绘制。 – rickster

+0

啊,呃。没有设置投影,我没有考虑过显示的可能性。我甚至不知道这一切都奏效了!谢谢。 – Olie