OpenGLの頂点シェーダでは、wは何で、なぜ私はそれで割るのですか?

StackOverflow https://stackoverflow.com/questions/2422750

  •  19-09-2019
  •  | 
  •  

質問

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

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;

だから、clipCoordは、標準の固定パイプラインの変換を行っています。 なぜ私はwで割るか、と私はここから何を得るのですか?

役に立ちましたか?

解決

Wは、第四の三次元頂点の座標です。この頂点が均質頂点座標と呼ばれている。

いくつかの単語では、Wコンポーネントは、他のベクトル成分を分割する因子です。 Wが1.0である場合、均質な頂点座標は、「正規化」されています。 2つの頂点を比較するには、あなたが1.0にW値を正規化する必要があります。

頂点(1,1,1,1)と考えてください。今(1.0> w)のW値を増やします。正規化された位置は、スケーリングされました!それが原点になるだろう。頂点(1,1,1,1)と考えてください。今(W <1.0)W値を下げます。正規化された位置が無限遠になるだろう。

別に頂点座標をスケーリングから、W座標あなたは4x1の行列(頂点)と4×4行列(モデルビューおよび/または投影行列)を乗算しなければならないので必要である。

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

  

のrel="noreferrer">

scroll top