我是OpenGL ES 2.0的新手,无法理解以下最简单的着色器:
attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
我的问题是,因为一个位置是(x, y, z)
的向量,为什么gl_Position是vec4而不是vec3?
答案 0 :(得分:25)
vec4(x,y,z,w)中的w用于裁剪,并在线性代数变换应用于该位置时起作用。
默认情况下,应将其设置为1.0。
答案 1 :(得分:3)
如果直接在剪辑空间中为着色器提供顶点,则只需传递x,y,z并在该着色器中添加1作为w组件。
attribute vec3 vPosition; // vec3 instead of vec4
void main()
{
gl_Position = vec4 (vPosition, 1.0);
}