Подтвердить что ты не робот

В вершинных шейдерах OpenGL, что такое w, и почему я разделяю его?

void main(void)
{
  vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
  gl_Position = clipCoord;

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;

Итак, clipCoord просто выполняет стандартные фиксированные преобразования конвейера. Почему я делясь на w, и что я получаю от этого?

4b9b3361

Ответ 1

W - четвертая координата трехмерной вершины; Эта вершина называется однородной вершинной координатой.

В нескольких словах W-компонент является фактором, разделяющим другие векторные компоненты. Когда W равно 1.0, однородные координаты вершин "нормированы". Чтобы сравнить две вершины, вы должны нормализовать значение W до 1.0.

Подумайте о вершине (1,1,1,1). Теперь увеличьте значение W (w > 1.0). Нормализованное положение масштабируется! и он будет происходить. Подумайте о вершине (1,1,1,1). Теперь уменьшите значение W (W < 1.0). Нормализованное положение переходит в бесконечную точку.

Помимо масштабирования координат вершин, необходима координата W, так как вам нужно умножить матрицу 4x4 (модельный вид и/или матрицы проекции) с матрицей 4x1 (вершина).

Конечно, Красная книга - это конкретное руководство:

Приложение Red Book