2017-01-26 15 views
-2

Я хочу программировать шейдеры и у меня есть положение вершины и 3-х матриц:Как рассчитать world_position в Shader

  • mat4 модель-представление-матрицу проекции
  • mat4 мир трансформация модели
  • mat3 мир преобразования для нормалей

выход должен быть

vec3 world_position 

Как я могу рассчитать это?

+0

Если ваш «мир трансформация модели» является преобразование из модели-пространства мирового пространства, не это просто вопрос с помощью этой трансформации? 'world_transform * in_vertex' – Frank

ответ

-2

Умножьте положение вершин как vec4 (pos, 1.0f) с матрицей проекции-проекции, чтобы получить мировые координаты.

Например,

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

vec3 world_position = world_vertex.xyz; 

EDIT

Извинения для чтения вопрос мимолетно. Я предполагал умножение mvp, потому что это типичное преобразование, необходимое для вызова шейдера. Как упоминалось в ОП, вершинная позиция должна быть умножена на модельную матрицу.

+2

После модели-проекции вы находитесь в пространстве клипов. Мировое пространство после применения модельной матрицы. Может быть, мировая трансформация оп говорит, но кто знает. – BDL

+0

Я предполагаю, что это матрица преобразования мира (к сожалению, нет документации). Я просто думаю, что странно, что матрица преобразования мира является mat4, но world_position является vec3 – Peter111

+1

Я не вижу ничего странного в этом. Если вы не используете однородные координаты '[world_position, 1]', невозможно обрабатывать переводы. Это также причина, по которой world_matrix является mat4, в то время как normal_matrix является mat3: нормали не нужно переводить, просто поворачивать. – BDL

1

Ответ:

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

vec3 world_position = world_vertex.xyz;