よくある右手系、左手系の変換の話ではありません。DirectXとOpenGLではビューポートの原点位置が異なるのですが、
これがOpenGL拡張を使うと共通化できるのでは!と。
これがOpenGL拡張を使うと共通化できるのでは!と。
その対応をやってくれそうな拡張が
- GL_ARB_fragment_coord_conventions
というやつです。
ドキュメントを読むと座標系の原点をどこに設定するか、
ピクセルのサンプリング位置をどうするか、という部分を変更できるようです。
この内容だけ見るとDirectX9の半テクセルずらすという部分とも対応をとることができそうです。
あと、この拡張はOpenGL 3.2に標準として取り込まれたらしいです。
これを用いて、常にシェーダー内で半テクセルずらす、を 両方の環境でやればいいわけですね。
問題はこれはGLSLのシェーダー内で記述があって有効となるようです。
■左上を原点としてみる、のテスト
ピクセル位置のほうはひとまず置いておいて、
ビューポートでの原点を変更することを試してみます。
DirectX9では、左上が原点だったので、
OpenGLでもこれにあわせることができるかを確認してみます。
…
GLSLのプログラム内に記述を書くも、挙動かわらず。。。
■まとめ
そもそも変換するという点で間違っていました。
よく見ると”fragment_coord_conventions”であり、”convertion”じゃありませんでした。
というわけでOpenGLのピクセル座標系をいじるものではありませんでした。
この機能は、ピクセルに関する取り決めをするようなそんな程度のものっぽいです。
でもこれきちんと使えば、DirectXの半テクセルずれている系を
OpenGLで再現させることもできるため、エミュレーション的動作には役立たせることが可能かもしれません。
コメント