10

私は OpenGL を利用した 2D エンジンに取り組んでいます。

OpenGL テクスチャを作成できるように、stb_image を使用して画像データを読み込みます。OpenGL の UV 原点が左下であることはわかっています。また、画面空間の 2D 頂点についてもその空間で作業するつもりです。つまり、 glm::ortho( 0, width, 0, height, -1, 1 を使用しています。 )、0 と高さを反転しません。

ご想像のとおり、私のテクスチャリングは上下反転していますが、UV が正しく指定されていることは 100% 確信しています。

では、これは stbi_load のピクセル データの保存が原因ですか? 現在、PNG ファイルのみをロードしているため、別のファイル形式を使用していた場合にこの問題が発生するかどうかはわかりません。そうでしょうか?(家にいないので、今はテストできません)。

画面の座標を「標準」の OpenGL 空間に維持したいのですが...正射影を反転させて修正できることは知っていますが、実際にはそうしません。

2 つの適切なオプションが表示されます。

1- これがピクセル データの stbi_load ストレージが原因である場合は、読み込み時に反転させることができます。パフォーマンス上の理由から、またスプライト アニメーションにテクスチャ アレイ (glTexture3d) を使用しているため、テクスチャ タイルを個別に反転する必要があるため、一般的な解決策ではないように思われます。

2-テクスチャ座標変換を使用して、GPU で UV を垂直方向に反転できます (私の GLSL シェーダーで)。

考えられる 3 番目のオプションは、glPixelStore を使用して入力データを指定することです...しかし、入力ピクセルが垂直方向に反転していることを伝える方法が見つかりません。

私の問題を処理するための推奨事項は何ですか? stbi_load + OpenGL を使用していて、その問題を抱えているのは私だけではないと思いました。

最後に、私のターゲット プラットフォームは PC、Android、iOS です :)

編集:私は自分の質問に答えました...以下を参照してください。

4

4 に答える 4