5

この質問を読みやすくすることができるかどうか見てみましょう。

私はOpenGLESで2Dタイルベースのエンジンを作成しており、これを昔ながらのラスターエンジンのように見せることを目的としています。私のアートアセットはすべてネイティブ解像度(つまり、1:1ピクセルアート)で、長方形のポリゴンにマッピングされています。OpenGLビューは直交しており、長方形(0.0、0.0)から(screen.width、screen.height)にまたがっています。 )。これは、ディスプレイ上の各ピクセルがXY座標平面の「仮想」ピクセルの正方形に対応し、それがタイルの1つのピクセルに対応することを期待して行いました。(タイルは16.0 x 16.0で、私の世界の起源は明らかに[0.0,0.0]です。)

近似誤差のために、私のエンジンは「偽物」に見えると確信していました。たとえば、タイルピクセルがディスプレイに直接書き込まれていないため、誤ったピクセルがフェッチされることがあると思いました。また、タイルが実際のディスプレイピクセルと位置合わせされていない場合は、カメラの動きによってOpenGLが補間することも確信していました。

結局のところ、OpenGLはラスターエンジンとほぼ同じように動作します。カメラが静止しているとき、各仮想ピクセルはディスプレイ上のピクセルに完全に対応します。カメラが動いているとき、タイルは補間によってスムーズに移動するのではなく、一度に1ピクセルの行/列を「スナップ」します。(これは、モーションが非常に遅い場合でも発生します。)好奇心から、タイルを1.1倍にスケーリングしようとしましたが、予想どおり、タイルが濁って見え始め、スナップ動作が停止しました。それでは、OpenGLは、レンダリングするものがディスプレイに完全に位置合わせできるかどうかによって、動作が異なるというのは本当ですか?

仕様のどこでこれらの問題に関する情報を見つけることができますか?また、OpenGLがこのように動作し続けることをどのように保証できますか?動作は理論的にはいつでも変更される可能性があるため、私はよく理解していないデフォルトを使用することに不快感を覚えます。

ありがとうございました!

4

1 に答える 1

3

仕様のどこでこの動作に関する情報を見つけることができますか?また、OpenGLがこのように動作し続けることをどのように保証できますか?

仕様の「ラスタライズ」の章全体を読む必要があります。何が保証され、OpenGL実装がどのように機能するかを正確に説明しています。

動作は理論的にはいつでも変更される可能性があるため、私はよく理解していないデフォルトを使用することに不快感を覚えます。

右。私があなたの状況で理解している限り、行動は明確に定義されています。ただし、仕様は実装にある程度の自由を与えるため、結果は実装ごとに異なる可能性があることに注意してください。たとえば、グリッドのx1.1スケーリングまたは20度回転では、エッジの正確なレート化はすでに実装定義されています。

「スナップ」動作が予想されることに注意してください。AAが有効になっていないため、OpenGLでは動きをスムーズにすることはできません。

于 2010-12-16T08:44:13.753 に答える