2012-04-13 66 views
1

我嘗試使用下面的代碼的Android的OpenGL ES 1.0的照明位置,方向和截止

float[] ambient = {0.1f, 1, 1, 1}; 
float[] position = {45, 20, 0, 1}; 
float[] direction = {0, -1, 0}; 

gl.glEnable(GL10.GL_LIGHT1); 
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_AMBIENT, ambient, 0); 
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_POSITION, position, 0); 
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_SPOT_DIRECTION, direction, 0); 
gl.glLightf(GL10.GL_LIGHT1, GL10.GL_SPOT_CUTOFF, 30.0f); 

一般當場正在努力創造在我的2D遊戲聚光燈,但我不能移動它,也不改變方向和切斷。 當我改變位置矢量時,它會保持在同一位置或完全消失。方向和截止點也是如此。它總是以45度角向左/向上發光。當我將GL_AMBIENT更改爲GL_DIFFUSE或GL_SPECULAR時,指示燈也會消失。我唯一能改變的就是光線的顏色。

我在做什麼錯?

回答

0

問題在於gles10只能實現每個頂點照明。必須實現每像素照明才能正常工作。

0

請注意,在固定管線中,在調用glLightf(GL_POSITION)時,光線的位置由矩陣堆棧頂部轉換。

因此,如果您想要定義燈光在世界座標中的位置,則必須已將ViewProjection矩陣放置在堆棧頂部。

這是一個常見的錯誤,很多人在設置相機/投影矩陣之前定義了光線在世界座標系中的位置,因此實際上它是在屏幕空間座標中定義的。

+0

hm,投影已經設置 – 2012-04-13 18:31:51

+0

@zolex:和相機矩陣? – Tim 2012-04-13 18:32:51

+0

什麼是相機矩陣? – 2012-04-13 18:47:04