"Red book"を持つメインリソースとしてOpenGLを学んでいます。私は行列代数、回転/スケーリング/変換行列について読んでいますが、すべてが素晴らしいですが、私は単純なことは一つもありません。 glLoadIdentity()関数を見てみましょう。デフォルトのマトリックスを4x4に設定します。したがって、3つの頂点と1つの点、すなわち(1,0,0)(0,1,0)(0,0,1)頂点、(0,0,0)点を設定します。しかし、私の質問は、それらが何を対応しているかです。一般的に言えば、OpenGLでは行列はどのように対応していますか?私はこれらが軸索の方向であるという考えを持っていました。しかし、何の斧?カメラ?OpenGLの行列
答えて
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 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)がマトリックスによって変換された後の位置を表すものと考えるだけです軸は絶対的ではなく原点を基準にしています)。
- 1. OpenGLの行列の乗算
- 2. 行列変換のOpenglの順
- 3. の取得とOpenGLモデルビュー行列
- 4. 変換OpenGLの4×4行列は、Iは、OpenGLに glGetFloatv(GL_MODELVIEW_MATRIX、(フロート*)x)を有するモデル行列抽出い
- 5. のOpenGL:テクスチャ配列
- 6. OpenGLでのシェーダの変換行列の計算方法
- 7. 回転のためのOpenGL行列変換
- 8. iPhone OpenGL es:ポイントについての行列を回転する
- 9. 移調行列は - - のOpenGL ES - 垂直に水平iPhone
- 10. OpenGL、ワールドツーオブジェクトの座標マッピングですか? (逆行列)
- 11. Android OpenGLの頂点配列
- 12. OpenGLのVBO DMA配列
- 13. C++/OpenGL - 配列のポインタ
- 14. 変換行列(NewtonGameDyanmics/OpenGL)を更新するには?
- 15. OpenGL変換行列をCATransformLayerで動作させるために
- 16. OpenGLでモデル行列を取得するには
- 17. Qt5でオフスクリーンレンダリング(openGL)を行う
- 18. OpenGLで点の配列を描く
- 19. スター型OpenGLの頂点配列
- 20. OpenGLのテクスチャユニットと頂点配列
- 21. OpenGLが提供する行列を使用したCUDAでのレイセットアップ
- 22. OpenGL ES + Androidのモデル行列から回転角を抽出する
- 23. CUDA - OpenGLレンダリングイメージを2D配列にコピー
- 24. OpenGL ESテクスチャが4列と行で複製されています
- 25. OpenGL-ESへのOpenGL - glBegin();
- 26. OpenGLでフレームアニメーションを行う方法
- 27. OpenGL Tessellationコールバックが実行されない
- 28. Android OpenGL ESでマルチサンプリングを行うには?
- 29. LinuxでOpenGLプログラムを実行する
- 30. グラフィックサーバーなしでOpenGLアプリケーションを実行中
ああ、glLoadIdentity()を呼び出すと、行列が1(恒等行列)にリセットされます。ベクトルとの多重度は同じベクトルになりますか?言い換えれば、何らかの形でオブジェクトに影響を与えませんか? draw関数は現在ロードされている行列を使ってオブジェクトを描画するので、これを行いますか?私はそれを正しく理解していますか? – Asido
@Asido:まったく正しい:) –