在OpenGL ES中,glNormal3f的目的是什么?

8

在OpenGL ES中,glNormal3f的作用是什么?如果没有立即模式可用,在OpenGL ES中我会用glNormal3f做什么?请给出示例代码。

5个回答

6

我认为这是与glColor函数相同的原因。如果你整个几何体的法线对于所有顶点都是相同的,你可以在调用glDrawArrays/glDrawElements之前使用glNormal指定它。


就是这样。在OpenGL|ES中,glNormal设置默认法线。我的看法是,如果他们将该功能删除,可能会更好。顺便说一下,glMultiTexCoord也是出于同样的原因存在。 - Nils Pipenbrinck

0
在OpenGL | ES中,glNormal3f()不是一个弃用的函数,因为它对于渲染{X,Y}平面中的平面2D形状非常有用:
而不是使用:
glEnableClientState( GL_NORMAL_ARRAY );
glNormalPointer( GL_FLOAT, 0, vbuf + normal_offset );

调用它更简单,需要更少的VBO内存:

glNormal3f( 0, 0, 1 );

1
请阅读格式帮助以了解如何标记代码 :-) - kleopatra

0
我能想到的唯一原因是它支持有效地表达许多顶点共享相同法线的表面。使用基于数组的方法,您必须为每个顶点创建一个重复相同值的数组,这会浪费内存。
我觉得很奇怪手册页面(OpenGL ES 1.1,在此处)甚至没有提到它。我找到了一个iPhone编程教程(PDF),甚至声称glNormal()已经不存在了。

“许多顶点共享相同的法线”是指“在给定的glDrawArrays调用中绘制的所有顶点共享相同的法线”,对吗?这样理解正确吗? - Gravity
我在iTunes/Podcasts上找不到来自犹他大学的“iPhone编程教程”,请更新链接。 - Cœur

0

OpenGL ES 1.1确实提到了它,但是在iPhone编程教程中这是一个错误。


0

您不应再使用这些功能。请坚持使用glXXXXArray()。我怀疑它们只是留下来的残留物,以使OpenGL到OpenGL ES的转换更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接