2017-01-10 22 views
1

OpenTKを使用して2DアプリケーションでOpenGLを使用する方法を学び、組み込み呼び出しを使用してglMatrixModeが最新でないことを読んでいます。私は左上の原点とピクセル座標をシェーダーの入力に使いたいと思っています。これらの変換を行うための行列を定義できると仮定しました。OpenTK - 左上原点とピクセル座標

私はOpenTKマトリックスクラスを使用して私自身のマトリックスを使ってこれをしようとしています。しかし、私は私が投影行列を設定する際にミスを犯したと思うし、私がやるべきものを確認したい: -

TranslationMatrix = Matrix4.Identity * Matrix4.CreateScale(1, -1, 1); 
TranslationMatrix = TranslationMatrix * Matrix4.CreateOrthographicOffCenter(0, bounds.Width, 0, bounds.Height, -1, 1); 
var TranslatedPoint = TranslationMatrix * new Vector4(new Vector3(1024, 768, 0), 1); // bounds = {0, 0, 1024, 768 } 

これはx.Xyz == { 2, -2, 0 }になります。私は、頂点シェーダのgl_positionに使用されるx座標とy座標が-1から1の範囲にあると考えました。

私はどこかで大きな誤解をしていると思います。

+0

wコンポーネントにはどの値がありますか?各軸上の[-1、1]の仮定は、均質化(wで除算)後にのみ真である。 – BDL

+0

乗算後のwは-1791です。位置ベクトルは、乗算の前にwを1として初期化される。 – chris

答えて

1

OpenTKは行列を転置形式で格納します。つまり、すべてを逆の順序で書き込む必要があります。

var TranslationMatrix = Matrix4.CreateOrthographicOffCenter(0, bounds.Width, 0, bounds.Height, -1, 1); 
TranslationMatrix = TranslationMatrix * Matrix4.CreateScale(1, -1, 1); 
var TranslatedPoint = new Vector4(1024, 768, 0, 1) * TranslationMatrix; 

結果は[1, -1, 0, 1]になります。

+1

ありがとうございました。私の紫色の四角形の上にある私の白い四角形がきれいに描きます。 – chris

関連する問題