Почему бы не vec3 для OpenGL ES 2.0 gl_Position? - PullRequest
29 голосов
/ 30 марта 2012

Я новичок в OpenGL ES 2.0 и не могу понять следующий простейший шейдер:

attribute vec4 vPosition;
void main()
{
   gl_Position = vPosition;
}

Мой вопрос таков: поскольку позиция будет вектором (x, y, z), почему gl_Position является vec4 вместо vec3?

Ответы [ 2 ]

25 голосов
/ 30 марта 2012

Значение w в vec4 (x, y, z, w) используется для отсечения и играет свою роль, когда к позиции применяются преобразования линейной алгебры.

По умолчанию это должно быть установлено на 1,0.

Смотрите здесь для получения дополнительной информации: http://web.archive.org/web/20160408103910/http://iphonedevelopment.blogspot.com/2010/11/opengl-es-20-for-iOS-chapter-4.html

3 голосов
/ 10 августа 2016

Если вы предоставляете свои вершины шейдеру непосредственно в пространстве клипа, вы можете просто передать x, y, z и добавить 1 в качестве компонента w в этом шейдере.

attribute vec3 vPosition; // vec3 instead of vec4
void main()
{
   gl_Position = vec4 (vPosition, 1.0);
}
...