2011-04-27 79 views
2

我有这种形式的一系列标准的OpenGL指令:的OpenGL ES(在iOS上):

glBegin(GL_TRIANGLES); 
// ... 
glNormal3fv(a); glVertex3f(a[0]*r, a[1]*r, a[2]*r); 
// ... 
glEnd(); 

我想在iOS上运行它们,因此必须将其转换为OpenGL ES的。由于OpenGL ES不支持glBegin()或glEnd(),我将glVertex3f调用封装到GLfloat顶点数组,然后调用glDrawArrays()调用。

GLfloat vertices[] = {1,0,0, 0,1,0, ...}; 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawArrays(GL_TRIANGLES, 0, 3); 
glDisableClientState(GL_VERTEX_ARRAY); 

但是我不能确定如何将其纳入正常的向量的规格(原glNormal3fv()调用),在此ES版。

有人会举足轻重来举例说明解决方案吗?

回答

4

看一看glNormalPointer()。它的工作方式与glVertexPointer()大致相同,但选项较少,因为法线总是有3个浮​​点组件。

+0

非常感谢您的快速回复,谢谢德鲁。所以实际上这里需要的是glDrawArrays()调用之前的另一行:glNormalPointer(GL_FLOAT,0,vertices); – KomodoDave 2011-04-27 00:28:32

+0

@KomodoDave:应该这样做! – 2011-04-27 00:30:10

+0

我在这里做了一个小小的滑动 - 事实上我需要一个单独的'法线'阵列,因为法线是'a'与顶点a * r(参见原始代码)。无论如何,现在所有排序我认为,即将测试..谢谢:) – KomodoDave 2011-04-27 15:31:00