iOS OpenGL ES绘制网格线框

时间:2012-10-06 10:23:09

标签: ios opengl-es

我在.OBJ文件中有一个人体模型我希望显示为带三角形的网格。没有纹理。我也希望能够在3D中移动,缩放和旋转。

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

但是我想将OpenGL ES用于该方法,但我不确定如何绘制三角形。

例如, - (void)drawRect:(CGRect)rect中的代码是:

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渲染线框是不可能的?所以我必须将颜色属性应用于顶点。没关系,但在此之前必须首先显示三角形。

1 个答案:

答案 0 :(得分: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

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

一旦你熟悉GL,你会发现在桌面OpenGL中通常用于线框绘制的函数glPolygonMode在OpenGL ES中并不存在。但是,根据顶点数据的组织方式,您可以使用GL_LINESGL_LINE_LOOP获得合适的线框。或者,由于您正在使用GLKit,因此可以使用GLKBaseEffect轻松跳过线框并设置一些灯光和阴影。