void main(void)
{
vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
gl_Position = clipCoord;
gl_FrontColor = gl_Color;
vec3 ndc = clipCoord.xyz / clipCoord.w;
したがって、clipCoord
は標準の固定パイプライン変換を実行しているだけです。 w
で除算するのはなぜですか?これで何が得られますか?
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座標が必要です。
もちろん、レッドブックは明確なガイドです。