2011-10-20 10 views
3

これは前に説明したと思いますが、私にとってはうまくいく答えが見つかりません。2D用のOpenGL ES 2.0、原点を左上に設定する方法

私は、OpenGL ES 2.0を搭載したiPad用の2D「描画」アプリケーションを開発しています。

「iPhone 3D Programming」の書籍で説明されている関数を使ってOrtho Projection Matrixを作成しています。関数呼び出しは次のようなものです:

proj = identity.Ortho(-width/2, width/2, -height/2, height/2, -1.0f, 1.0f); 

これは正常ですが、ビューポートの中央に原点を置いています。私は原点が左上隅にあるようにするために、ユーザーからペイントするための情報をタッチする必要があります。

私はちょうど(幅/ 2、高さ/ 2)を差し引くことができるので、私は本当にそれが必要ではないことを知っていますが、原点がTLにあったならば、

だから私はこの試みた:

proj = identity.Ortho(0, width, 0, height, -1.0f, 1.0f); 

をしかし、私は、私はViewModelに行列を回転させたときに、私はちょうどそれが歪ん得るようなもの、それはだ、いくつかの線や三角形を参照四角形を描画した場合には、全く動作しません。

ありがとうございます。

+0

OpenGLでは、垂直座標は、ココアのビューの下からの距離です。これは、上からの距離です。 – jbat100

+0

私はあなたが何を意味しているのか知っていますが、私はそれが投影行列で私の問題を解決するとは思わない。または私は何かを逃していますか? – Odrakir

+0

その理由は分かりません:) – jbat100

答えて

4

identity.Ortho(0, width, 0, height, -1.0f, 1.0f)あなたは正しい軌道に乗っていました。しかし、これは原点を左下に配置します(3D空間は右利きで、画面空間では動作しないので、yは上がり、xは右に移動します)。代わりに、ちょうど

proj = identity.Ortho(0, width, height, 0, -1.0f, 1.0f); 

を使用して上下を入れ替えるしかし、反時計回りに回し、これは(あなたがそれを望むように)、y方向を反映するので、それはあなたが描く任意の三角形の向きを反転することを、心に留めておきます三角形を時計回りの三角形に変換します。これは本当に問題ではありません。三角形の向き(例:背面のカリング、両面の材質など)に基づいて作業を行うときは、このことを念頭に置いておかなければなりません。glFrontFaceを使用してデフォルトの前面側巻線順序。しかし、あなたが2Dをしたいので、三角形の向きとバックフェールのカリングは、とにかくそれほど問題にならないでしょう。

+0

はい、私もそれを試しましたが、何か変なことが起こるはずです。 私が言ったように、画面の中央で回転できる長方形を描きます。私がそのOrtho Matrixを使用すると、それはもはや矩形ではなく、回転すると表示されて消えていくような三角形のようなものです。 ?!?!? – Odrakir

+0

@Odrakirたぶんバックフェイスカリングが有効になっていますか? 'glDisable(GL_CULL_FACE)'を呼び出すことを試みてください。これは本当に奇妙に聞こえます。多少のコード​​が状況を明らかにするのに役立つでしょう。 –

+0

あなたは何を知っていますか?あきらめる。私はある日を見つけ出すだろうが、今は中心の起源で生きなければならないだろう。とにかくそれほど悪くはありません。 – Odrakir