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

Почему не 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?

4b9b3361

Ответ 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);
}