我是新来的OpenGL ES 2.0,而无法理解以下简单的着色器:为什么不用vec3 for OpenGL ES 2.0 gl_Position?
attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
我的问题是,既然一个位置将是(x, y, z)
载体,为什么GL_POSITION一个vec4代替VEC3?
我是新来的OpenGL ES 2.0,而无法理解以下简单的着色器:为什么不用vec3 for OpenGL ES 2.0 gl_Position?
attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
我的问题是,既然一个位置将是(x, y, z)
载体,为什么GL_POSITION一个vec4代替VEC3?
vec4(x,y,z,w)中的w用于剪切,并在线性代数转换应用于位置时发挥作用。
默认情况下,它应该设置为1.0。
如果您提供的顶点直接剪裁空间着色器,你可以只通过X,Y,Z和添加1作为在着色器w成分。
attribute vec3 vPosition; // vec3 instead of vec4
void main()
{
gl_Position = vec4 (vPosition, 1.0);
}
在这个线程中的一些很好的解释:http://www.gamedev.net/topic/506162-3d-math-4-component-vectors/ – Tim 2012-03-30 16:38:49