2011-01-27 7 views
0

"Red book"を持つメインリソースとしてOpenGLを学んでいます。私は行列代数、回転/スケーリング/変換行列について読んでいますが、すべてが素晴らしいですが、私は単純なことは一つもありません。 glLoadIdentity()関数を見てみましょう。デフォルトのマトリックスを4x4に設定します。したがって、3つの頂点と1つの点、すなわち(1,0,0)(0,1,0)(0,0,1)頂点、(0,0,0)点を設定します。しかし、私の質問は、それらが何を対応しているかです。一般的に言えば、OpenGLでは行列はどのように対応していますか?私はこれらが軸索の方向であるという考えを持っていました。しかし、何の斧?カメラ?OpenGLの行列

答えて

5

OpenGLマトリックスは、ある座標空間で定義されたオブジェクト、ベクトル、点を別の座標空間に移動する変換にのみ対応します。ある座標空間に行列M(以下に示すようにm11 - m44)とベクトルV(v1 - v4)を持っていれば、Mを掛けてVベクトル(動きベクトル、オブジェクトの位置、オブジェクトの頂点)異なる座標空間でのW(W1-W4)へ:私たちはV1のだと思うのであれば

w1 = m11 * v1 + m12 * v2 + m13 * v3 + m14 * v4 
w2 = m21 * v1 + m22 * v2 + m23 * v3 + m24 * v4 
w3 = m31 * v1 + m32 * v2 + m33 * v3 + m34 * v4 
w4 = m41 * v1 + m42 * v2 + m43 * v3 + m44 * v4 

- V3歳のx、y、zの座標と設定v4のよう:

| m11 m12 m13 m14 | | v1 |  | w1 | 
| m21 m22 m23 m24 | | v2 |  | w2 | 
| m31 m32 m33 m34 | X | v3 | = | w3 | 
| m41 m42 m43 m44 | | v4 |  | w4 | 

1からw1 - w3を新しいx、y、z座標と考えることができます。
m11は古いx座標から新しい座標への乗数ですそれは、スケール変換に使われている(と同様にM22とM33用)
M14は1を乗じと

回転が少し困難であるので、座標、それが翻訳のために使用されている(同様M24およびM34)新しいXに添加しました概念化するが、他の行列値を適切な値に設定することによって行われる。あなたはもっとここで読むことができます:http://gpwiki.org/index.php/Matrix_math

+1

ああ、glLoadIdentity()を呼び出すと、行列が1(恒等行列)にリセットされます。ベクトルとの多重度は同じベクトルになりますか?言い換えれば、何らかの形でオブジェクトに影響を与えませんか? draw関数は現在ロードされている行列を使ってオブジェクトを描画するので、これを行いますか?私はそれを正しく理解していますか? – Asido

+0

@Asido:まったく正しい:) –

0

デフォルトマトリックスは、単に単位行列である:より一般的な場合には

/1 0 0 0\ 
|0 1 0 0| 
|0 0 1 0| 
\0 0 0 1/ 

(視点およびおそらく他のエキゾチックな変換を無視して)...

/a d g j\ 
|b e h k| 
|c f i l| 
\0 0 0 1/ 

...変換された座標系の成分は以下の通りです。

  /a\ 
X-axis = |b| 
     \c/ 

     /d\ 
Y-axis = |e| 
     \f/ 


     /g\ 
Z-axis = |h| 
     \i/ 

     /j\ 
Origin = |k| 
     \l/ 

これらを恒等行列に関連付けると、「3つの頂点と1つの点」の出所を知ることができます。

恒等行列以外は、最下行を(0 0 0 1)に保ち、そのような変換を視覚化するための簡単な方法を提供する変換(回転、平行移動など)に適用されます。上の4つの要素は、軸(1 0 0)、(0 1 0)、(0 0 1)、および原点(0 0 0)がマトリックスによって変換された後の位置を表すものと考えるだけです軸は絶対的ではなく原点を基準にしています)。

関連する問題