2012-12-17 88 views
1

我通過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

回答

2

當glDrawElements嘗試訪問您的內存時,您可能將無效參數傳遞給glNormalPointer,導致訪問衝突。當啓用照明時,舊的固定功能每頂點照明代碼僅使用法線。

關於你的其他問題: 你必須在旋轉網格時旋轉法線。翻譯和縮放不會影響法線。這是通過固定功能管道(我認爲您正在使用)自動完成的,只需在編寫自定義頂點着色器或在CPU上旋轉網格時手動完成。 glEnable(GL_NORMALIZE)只在縮放網格時需要,否則可以丟棄該函數。