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

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;

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

4

1 回答 1

56

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 矩阵(顶点)相乘。

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

红皮书附录

于 2010-03-11T06:38:28.510 回答