0

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

4

1 回答 1

1

我要问的第一件事是:你的顶点在哪里?OpenGL (ES) 在从 (-1, -1, -1) 到 (1, 1, 1) 的坐标空间中绘制,因此您可能希望使用投影矩阵转换您的点以将它们放入该空间。要了解投影矩阵以及 iOS 上 OpenGL ES 2.0 的更多基础知识,我建议找一本书或教程。这个还不错,还有一个是 GLKit 特有的

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

一旦你熟悉了 GL,你会发现glPolygonMode通常用于在桌面 OpenGL 上绘制线框的函数在 OpenGL ES 中不存在。但是,根据您的顶点数据的组织方式,您可能能够使用GL_LINES或获得一个体面的线框GL_LINE_LOOP。或者由于您使用的是 GLKit,您可以跳过线框并使用GLKBaseEffect.

于 2012-10-06T20:01:54.993 回答