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

StackOverflow https://stackoverflow.com/questions/2422750

  •  19-09-2019
  •  | 
  •  

Вопрос

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

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;

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

Это было полезно?

Решение

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 (вершина).

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

Приложение к Красной книге

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top