在OpenGL顶点着色器中,w是什么,为什么除以w?(In OpenGL vertex shaders, what is w, and why do I divide by it?)

在OpenGL顶点着色器中,w是什么,为什么除以w?(In OpenGL vertex shaders, what is w, and why do I divide by it?)_第1张图片

顶点数据经过mvp变换下一步先要divide by w用来标准化设备坐标:

标准化设备坐标是一个x、y和z值在-1.0到1.0的一小段空间。任何落在范围外的坐标都会被丢弃/裁剪,不会显示在你的屏幕上。与通常的屏幕坐标不同,y轴正方向为向上,(0, 0)坐标是这个图像的中心,而不是左上角。最终你希望所有(变换过的)坐标都在这个坐标空间中,否则它们就不可见了。

顶点着色器代码:

void main(void)
{
  vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
  gl_Position = clipCoord;

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;
}

 

 

你可能感兴趣的:(opengl)