Почему не vec3 для OpenGL ES 2.0 gl_Position?
Я новичок в OpenGL ES 2.0 и не могу понять следующий простейший шейдер:
attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
Мой вопрос в том, что позиция будет вектором (x, y, z)
, почему gl_Position a vec4 вместо vec3?
Ответы
Ответ 1
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
Ответ 2
Если вы предоставите свои вершины шейдеру непосредственно в пространстве клипов, вы можете просто передать x, y, z и добавить 1 в качестве w-компонента в этом шейдере.
attribute vec3 vPosition; // vec3 instead of vec4
void main()
{
gl_Position = vec4 (vPosition, 1.0);
}