2016-10-27 19 views
0

OpenGL座標系がどのように動作するのか混乱します。私はあなたがオブジェクト座標から始まることを知っています - すべてはそれ自身のシステムで定義されています。行列を適用することによって、座標はワールド座標に変わります。別の行列を適用すると、ビューの座標が得られます。 3Dで作業している場合は、パースペクティブマトリックスを適用することができます。最後に、[-1、1]からではない可能性が高い座標のセットが残されます。 OpenGLは[-1、1]からそれらを正規化する方法をどのように知っていますか?どのようにそれらを切り取るべきかを知っていますか?シェーダでは、glPositionには座標が与えられているだけで、いくつかの変換が行われていることはわかりません。私は、正規化された座標マトリックスへのビューは変換とスケールを必要とすることを知っていますが、OpenGLではそのためのマトリックスを明示的に作成することはありません。 OpenGLは独自の隠し行列を使ってglPostionに渡された座標から正規化された座標に変換しますか?座標系[-1、1]

+1

ない「隠し」はありませんがある唯一のものは、[パースペクティブ分割](http://www.learnopengles.com/tag/perspective-divide/)である行列。 –

+0

@LJ perspective逆投影がない場合(正射投影など) OpenGLは座標を正規化する方法をどのように知っていますか? – foobar5512

+0

[読んでお楽しみください](http://www.songho.ca/opengl/gl_transform.html) –

答えて

0

廃止固定機能頂点変換は各変換ステップのために同じ又は非常に類似した数学を使用する可能性があるhttps://www.opengl.org/wiki/Vertex_Transformation

シェーダーベースのレンダリングに説明します。 glPositionとデバイス座標の間の欠落したステップは、xyzw座標がxyz座標に変換される遠近法分割(LJのようにすばやくコメントされる)です。 xyzw座標は、4つのコンポーネントを使用して位置を表す3次元座標の同次座標です。

https://en.wikipedia.org/wiki/Homogeneous_coordinates

+0

OpenGLは正規化座標を得るためにwで割りますか? x、y、z、wをシェーダーに渡しますか? – foobar5512