2012-04-13 7 views
1

Ich versuche, einen Scheinwerfer in meinem 2D-Spiel erstellen mit dem folgenden CodeAndroid OpenGL ES 1.0 Beleuchtung Position, Richtung und Cutoff

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); 

Im Allgemeinen ist die Stelle arbeitet, aber ich kann es nicht bewegen, noch Ändern Sie die Richtung und den Cutoff. Wenn ich den Positionsvektor ändere, bleibt er in der gleichen Position oder verschwindet vollständig. Dasselbe passiert mit Richtung und Cutoff. Es glänzt immer links/oben mit einem Winkel von 45 Grad. Wenn ich GL_AMBIENT zu GL_DIFFUSE oder GL_SPECULAR ändere, verschwindet auch das Licht. Das einzige, was ich ändern kann, ist die Farbe des Lichts.

Was mache ich falsch?

Antwort

0

das Problem war, dass gles10 nur Per-Vertex-Beleuchtung tut. Um dies zu gewährleisten, muss eine Per-Pixel-Beleuchtung implementiert werden.

0

Beachten Sie, dass in einer festen Pipeline die Position des Lichts durch die Spitze des Matrixstacks zu der Zeit glLightf(GL_POSITION) genannt wird.

Wenn Sie also die Position Ihres Lichts in Weltkoordinaten definieren möchten, müssen Sie die ViewProjection-Matrix bereits oben auf dem Stapel haben.

Es ist ein weit verbreiteter Fehler, dass viele Menschen die Position des Lichts in Weltkoordinaten definieren, bevor sie ihre Kamera-/Projektionsmatrix einrichten, so dass sie tatsächlich in Bildschirmkoordinaten definiert wird.

+0

hm, Projektion ist bereits eingerichtet –

+0

@zolex: und Kameramatrix? – Tim

+0

Was ist Kameramatrix? –