在OpenGL顶点着色器中,w是什么,为什么要除以它?

时间:2010-03-11 05:29:24

标签: opengl vertex-shader

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

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;

所以clipCoord只是做标准的固定管道转换。 为什么我除以w,我从中得到什么?

1 个答案:

答案 0 :(得分:40)

W是三维顶点的第四个坐标;该顶点称为齐次顶点坐标。

简而言之,W分量是划分其他矢量分量的因子。当W为1.0时,均匀顶点坐标被“标准化”。要比较两个顶点,您应该将W值标准化为1.0。

想想顶点(1,1,1,1)。现在增加W值(w> 1.0)。标准化位置正在缩放!它将成为起源。想想顶点(1,1,1,1)。现在减小W值(W <1.0)。标准化位置将达到无限点。

除了缩放顶点坐标外,W坐标是必要的,因为您必须将4x4矩阵(模型视图和/或投影矩阵)与4x1矩阵(顶点)相乘。

当然,红皮书是明确的指南:

  

Red Book Appendix

相关问题