2017-01-26 3 views
-2

ich einen Shader programmieren wollen, und ich habe die Position eines Scheitels und 3 Matrizen:Wie berechnen world_position in Shader

  • MAT4 Model-View-Projektionsmatrix
  • MAT4 Welt Transformation des Modells
  • MAT3 Welt Transformation für Normale

Der Ausgang

vec3 world_position 
sein muss

Wie kann ich das berechnen?

+0

Wenn Ihre „Welt Transformation des Modells“ ein von Modellraum, um Weltraumtransformation ist, ist es nicht nur eine Frage der diese Transformation? 'world_transform * in_vertex' – Frank

Antwort

-2

Multiplizieren Sie die Eckpunktposition als vec4 (pos, 1.0f) mit der Modellansicht-Projektionsmatrix, um die Weltkoordinaten zu erhalten.

Zum Beispiel

vec4 world_vertex = mvp_transform * vec4(vertexPosition, 1.0f); 

vec3 world_position = world_vertex.xyz; 

EDIT

Entschuldigt flüchtig die Frage zu lesen. Ich nahm die mvp-Multiplikation an, weil dies die typische Transformation ist, die benötigt wird, bevor der Fragment-Shader aufgerufen wird. Wie bereits erwähnt, sollte die Vertexposition mit der Modellmatrix multipliziert werden.

+2

Nach der Model-View-Projektion befinden Sie sich im Clip-Bereich. Weltraum ist nach dem Anwenden der Modellmatrix. Könnte die Welttransformation sein, die darüber spricht, aber wer weiß. – BDL

+0

Ich nehme an, dass es die Welttransformationsmatrix ist (leider gibt es keine Dokumentation). Ich denke nur, dass es seltsam ist, dass die Welttransformationsmatrix mat4 ist, aber die world_position ist ein vec3 – Peter111

+1

Ich sehe damit nichts Seltsames. Wenn Sie keine homogenen Koordinaten '[world_position, 1]' verwenden, ist es unmöglich, mit Übersetzungen umzugehen. Das ist auch der Grund, warum world_matrix eine mat4 ist, während normal_matrix eine mat3 ist: Normale müssen nicht übersetzt werden, nur gedreht. – BDL

1

Die Antwort war:

vec4 world_vertex = model_matrix * vec4(vertexPosition, 1.0f); 

vec3 world_position = world_vertex.xyz;