什么可能导致glEnable(GL_LIGHT0)崩溃glDrawElements?

什么可能导致glEnable(GL_LIGHT0)崩溃glDrawElements?

问题描述:

我通过3点阵列的指针的OpenGL与:什么可能导致glEnable(GL_LIGHT0)崩溃glDrawElements?

glColorPointer() 
glNormalPointer() 
glVertexPointer() 

寄托都工作正常,但是当我尝试通过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是正常的,我有疑问:

  1. 确实,当我平移或旋转或缩放网格中的正常变动?

  2. 什么可能导致glDrawElements崩溃通过启用照明?

3.since我的法线来自文件,它已经正常化我必须调用glEnable(GL_NORMALIZE)?

+0

你是什么意思'崩溃'?怎么了? – JasonD

当glDrawElements尝试访问您的内存时,您可能将无效参数传递给glNormalPointer,导致访问冲突。当启用照明时,旧的固定功能每顶点照明代码仅使用法线。

关于你的其他问题: 你必须在旋转网格时旋转法线。翻译和缩放不会影响法线。这是通过固定功能管道(我认为您正在使用)自动完成的,只需在编写自定义顶点着色器或在CPU上旋转网格时手动完成。 glEnable(GL_NORMALIZE)只在缩放网格时需要,否则可以丢弃该函数。