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