OpenGLの原点を画面の左上に変更する場合、何を心配すればよいですか?


11

自己啓発のために、私はSDL / OpenGLを使用してC ++で2Dプラットフォーマーエンジンを書いています。最初はsdltutorials.comとlazyfoo.netのチュートリアルを使用して純粋なSDLから始めましたが、現在はSDLを使用してOpenGLレンダリングコンテキストを作成し、OpenGL関数でレンダリングしています(特に即時モードですが、VAO / VBOについて学習しています) )。インターフェイス、オーディオなどにのみSDLを使用しています。

SDLは、画面の左上を原点とし、正のy軸を下に向けた座標系を使用します。OpenGLで正投影を設定してこれをミラーリングするのは簡単です。

テクスチャ座標が0から1までの値を持つ右側のシステムであることを知っています-レンダリングする前にテクスチャを垂直に反転(まあ、ロードする前にファイルを反転)すると、正しくレンダリングされるテクスチャが生成されます...描画している場合は問題ありませんテクスチャ全体ですが、最終的にはタイルセットを使用し、問題を想像できます。

これを行うと、レンダリングに関して何を気にする必要がありますか?

誰かが何かアドバイスをしたり、自分でこれを行って将来の落とし穴を指摘したりできるなら、それは素晴らしいことですが、実際にはどんな考えでもありがたいです。


1
SDLを使用して(SDLのブリッティング関数のように)レンダリングしますか、それともSDLを使用してOpenGLレンダリングコンテキストを作成してから、OpenGL関数を使用してレンダリングしますか?
Nicol Bolas 2012

1
SDLを使用してOpenGLレンダリングコンテキストを作成し、OpenGL関数を使用してレンダリングしています。質問でこれを明らかにします。
派生物

1
物理システムを使用する場合は、使用する座標系(右利きまたは左利き、Y-UPまたはY-DOWN)を確認し、同じように使用してください。もちろん重力の逆転のようなことをすることができますが、私はthngsをより簡単にするために同じことを使用することを試みます。
Gustavo Maciel 2012

回答:


8

「これを行うと、レンダリングに関して何を気にする必要がありますか?」- あまりない。座標系は単なる規則であり、厳格な規則ではありません。これは完全に合法で有効なことです。自分の使い方に一貫性があり、すべてが正常に機能することを確認してください。


すごい!私が心配する必要があったのは直感の一貫性だけでしたが、これは私にとって新しい領域です。
派生物の

1
親愛なる古いQuakeが1996年にこれを行ったが、それは問題なく機能したことを付け加えておきます。
Maximus Minimus 2012

5

OpenGLを使用して2Dで作業する場合、左上隅を原点として使用することがよくあります。これは次のようにして行うことができます:

glOrtho(0,      // left
        width,  // right
        height, // bottom
        0,      // top
        0,      // zNear
        1       // zFar
        );

ただし、原点を左上に変更すると、いくつかの落とし穴があります。

私が2回以上遭遇した1つの落とし穴:glScissor()クリッピングに使用されるは、常に左下の座標を使用します。

その署名は次のとおりです。

void glScissor( GLint x, GLint y, GLsizei width, GLsizei height )

ここで、はさみボックスの左下隅をx, y指定します。

より一般的には、ウィンドウ座標で動作する関数はすべて左下を原点として使用します。これは、同様の機能が含まgluProjectgluUnProjectglCopyPixels、など

しかし、いくつかの機能glDrawPixelsglRasterPos、位置決めの使用やglRasterPosオブジェクト(つまり、変換された)座標の使用などです。

Linuxで実行していて、の使用方法を知っている場合manは、OpenGLのマンページのコピーをここで入手 できます。ftp//ftp.sgi.com/sgi/opengl/doc/リアルタイムで見つかります-セーバー。

また、「ロードする前にファイルをフリップ」テクスチャを言うことに気づきました。これは必要ありません。読み込み時に画像を反転するのではなく、レンダリング時にテクスチャ座標を反転して1.0から0.0に移動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.