В вершинных шейдерах 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, и что я получаю от этого?

40
задан Zach Saucier 20 June 2016 в 23:40
поделиться

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

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

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

43
ответ дан 27 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: