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 は 3 次元頂点の 4 番目の座標です。この頂点は同次頂点座標と呼ばれます。

簡単に言えば、W 成分は他のベクトル成分を分割する要因です。W が 1.0 の場合、均一な頂点座標は「正規化」されます。2 つの頂点を比較するには、W 値を 1.0 に正規化する必要があります。

頂点 (1,1,1,1) について考えてみましょう。ここで、W 値を増やします (w > 1.0)。正規化された位置がスケーリングされています! そして原点に向かいます。頂点 (1,1,1,1) について考えてみましょう。ここで、W 値を減らします (W < 1.0)。正規化された位置は無限ポイントに向かっています。

頂点座標のスケーリングとは別に、4x4 マトリックス (モデル ビューおよび/または投影マトリックス) を 4x1 マトリックス (頂点) で乗算する必要があるため、W 座標が必要です。

もちろん、レッド ブックは明確なガイドです。

レッドブック付録

于 2010-03-11T06:38:28.510 に答える