DGL
https://delphigl.com/forum/

Lichtposition
https://delphigl.com/forum/viewtopic.php?f=20&t=7885
Seite 1 von 1

Autor:  Schläfer [ Fr Okt 10, 2008 18:45 ]
Betreff des Beitrags:  Lichtposition

Irgendwie hab ich ein Problem mit den Lichtkoordinaten im Vertexshader.

Wenn ich die Position der Lichtquelle in meiner Anwendung "per Hand" mit der Kameramatrix multipliziere sind die Koordinaten relativ zur Kamera richtig (oben rechts (1,1)). Übergebe ich aber die selbe Matrix an den Vertexshader und mulitpliziere dann mit dem Vektor kommt nur irgendwelcher Mist raus.

Im Hauptprogramm wird so mit der Matrix multiplizert:
Code:
  1.  
  2.   Result[0]:=v[0]*m[0,0]+v[1]*m[1,0]+v[2]*m[2,0]+m[3,0];
  3.   Result[1]:=v[0]*m[0,1]+v[1]*m[1,1]+v[2]*m[2,1]+m[3,1];
  4.   Result[2]:=v[0]*m[0,2]+v[1]*m[1,2]+v[2]*m[2,2]+m[3,2];
  5.  


Die Matrix bekomm ich durch glGet nachdem die Kamera mit gluLookAt eingestellt wurde.

Bei der Variante im Vertexshader wird die Position so bestimmt:
Code:
  1.  
  2. vec3(kameramatrix * gl_LightSource[0].position)
  3.  


Die Matrix wird übergeben mit:
Code:
  1.  
  2. glUniformMatrix4fv(glGetUniformLocationARB(Shader, PGLCharARB('kameramatrix')), 1 ,false ,@matrix);
  3.  


Im Shader kommt die Matrix auch an, aber egal wie ich multiplizere oder transponiere es kommt immer etwas falsches raus.

Autor:  MatReno [ Mo Okt 13, 2008 09:52 ]
Betreff des Beitrags: 

Hallo,
ich weiss nicht ob es was hilft, aber mach mal lieber:
Code:
  1. glUniformMatrix4fv(glGetUniformLocationARB(Shader, PGLCharARB('kameramatrix')), 1 ,false ,@matrix[0][0]);

Autor:  Schläfer [ Mo Okt 13, 2008 14:55 ]
Betreff des Beitrags: 

MatReno hat geschrieben:
Hallo,
ich weiss nicht ob es was hilft, aber mach mal lieber:
Code:
  1. glUniformMatrix4fv(glGetUniformLocationARB(Shader, PGLCharARB('kameramatrix')), 1 ,false ,@matrix[0][0]);


Hat leider nichts geändert. Aber wahrscheinlich ist es so sowieso besser. Die Position einmal pro Frame umzurechnen, anstatt einmal für jeden Vertex, sollte doch schneller sein.

Autor:  Pellaeon [ Sa Okt 18, 2008 12:44 ]
Betreff des Beitrags: 

Ist besser jo^^

Wenn die Matrix stimmt, wäre ja das naheliegendste, dass die Daten der Lichtposition nicht stimmen.

Autor:  oc2k1 [ Fr Okt 24, 2008 13:17 ]
Betreff des Beitrags: 

DIe Opengl Licht positionionen wereden beim aufrufen der glLight funktionen bereits mit den entsprechenden matrizen multipliziert. D.H. es ist wahrscheinlicht, das die licht position zwei mal mit der matrix multipliziert wurde. Abhilfe können eigene shader variablen sein (für die zukunft sinvoll).

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/