2012-01-20 14 views
1

次の行列は、システム(列優先)投影ビューマトリックス、OpenGL。 iOSの

座標手渡し左にとする私は、AppleのGLKMatrix4x4の構造体と関数を使用していますので、数学の操作が正しいと仮定することができます。

私は次のことが正しい行列を生成することを期待しています。

projectionViewModel = camera.projection * camera.view * model.view 

ただし、モデルのカメラの移動オフセットの回転が開始されるため、これは間違っています。

しかし、私が次のことをすると、正しい結果が得られます。

projectionViewModel = camera.projection * camera.inverseView * model.view 

私の質問はどこですか?または、これはprojectionViewModel行列を生成する正しい方法ですか?

GLKMatrix4 modelView = GLKMatrix4Multiply(*[_scene.camera inverseView],*[_frame worldMatrix]); 

GLKMatrix4 projectionViewModel = GLKMatrix4Multiply(*[_scene.camera proj],modelView); 

答えて

2

カメラに直接置かれたオブジェクトで何が起きるかについて考えてみましょう。あなたはcamera.view = model.viewを持っています。その場合、実際に望むのは、カメラが何をしていても、プロジェクションに先立って変換が適用されないようにするために、モデルが掛け合わされて単位行列を作ることです。

カメラを設置するときに、ポジショニングに使用するものの逆数を使用したいとします。なぜなら、逆数は原則と掛け合わされたときにアイデンティティを与えることになるからです。

あなたは何かを混乱させませんでした。あなたが与えた2番目の式と、あなたが正しい結果を返す式は正しいです。

+0

自分自身をダブル推測する – Nico