我通过以下方法将3个数组指针传递给opengl:
glColorPointer()
glNormalPointer()
glVertexPointer()
everthing工作正常,但当我尝试通过glEnable启用灯光时(GL_LIGHT0);
glDrawElements刚刚崩溃,我认为正常有问题吗?我的正常来自这个文件:
1.000000 1.000000 -1.000000 0.000000 0.000000 -1.000000
1.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000
-1.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000
1.000000 0.999999 1.000000 -0.000000 0.000000 1.000000
-1.000000 1.000000 1.000000 -0.000000 0.000000 1.000000
-1.000000 -1.000000 1.000000 -0.000000 0.000000 1.000000
1.000000 1.000000 -1.000000 1.000000 -0.000001 -0.000000
1.000000 0.999999 1.000000 1.000000 -0.000001 -0.000000
0.999999 -1.000001 1.000000 1.000000 -0.000001 -0.000000
1.000000 -1.000000 -1.000000 -0.000000 -1.000000 -0.000000
0.999999 -1.000001 1.000000 -0.000000 -1.000000 -0.000000
-1.000000 -1.000000 1.000000 -0.000000 -1.000000 -0.000000
-1.000000 -1.000000 -1.000000 -1.000000 0.000000 -0.000000
-1.000000 -1.000000 1.000000 -1.000000 0.000000 -0.000000
-1.000000 1.000000 1.000000 -1.000000 0.000000 -0.000000
1.000000 0.999999 1.000000 0.000000 1.000000 0.000000
1.000000 1.000000 -1.000000 0.000000 1.000000 0.000000
-1.000000 1.000000 -1.000000 0.000000 1.000000 0.000000
-1.000000 1.000000 -1.000000 0.000000 0.000000 -1.000000
0.999999 -1.000001 1.000000 -0.000000 0.000000 1.000000
1.000000 -1.000000 -1.000000 1.000000 0.000000 0.000000
1.000000 1.000000 -1.000000 1.000000 0.000000 0.000000
0.999999 -1.000001 1.000000 1.000000 0.000000 0.000000
-1.000000 -1.000000 -1.000000 -0.000000 -1.000000 0.000000
-1.000000 1.000000 -1.000000 -1.000000 0.000000 -0.000000
-1.000000 1.000000 1.000000 0.000000 1.000000 0.000000
前3个是顶点位置,最后3个是正常的,我有疑问:
在翻译或旋转或缩放网格时是否正常更改?
启用灯光会导致glDrawElements崩溃的原因是什么?
3.因为我的法线来自文件,并且已经规范化了我是否必须调用glEnable(GL_NORMALIZE)?
答案 0 :(得分:2)
当glDrawElements尝试访问您的内存时,您可能会将无效参数传递给glNormalPointer,从而导致访问冲突。旧的固定功能每顶点照明代码仅在启用照明时使用法线。
关于您的其他问题: 旋转网格时必须旋转法线。翻译和缩放不会影响法线。这是由固定功能管道(我想你正在使用)自动完成的,只需在编写自定义顶点着色器或在CPU上旋转网格时手动完成。只有在缩放网格时才需要glEnable(GL_NORMALIZE),否则您可以放弃此功能。