2

基本的に私はopengl/c++で2Dゲームを作っています。テクスチャがマップされたクワッドがあり、2 のべき乗でない画像を使用できない (または少なくともすべきではない) ため、2 のべき乗画像内に画像があり、余分な画像をテクスチャ マッピングで削除したいと考えています。

GLfloat quadTexcoords[] = {
    0.0, 0.0,
    0.78125, 0.0,
    0.78125, 0.8789,
    0.0, 0.8789
};
glGenBuffers(1, &VBO_texcoords);
glBindBuffer(GL_ARRAY_BUFFER, VBO_texcoords);
glBufferData(GL_ARRAY_BUFFER, sizeof(quadTexcoords), quadTexcoords, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

これは私のテクスチャ コードです。私が知っている特別なことは何もありません。X 座標 ( 0.7256) は正常に機能し、画像の右側にある余分な画像が削除されます。ただし、Y 座標は機能しません。ゲームをデバッグしたところ、正しい座標がシェーダーに送信されていることがわかりましたが、マップされません。時々逆に動作しているように見えますが、非常に不明確です。

20 のような Y の座標を指定すると、複数回繰り返されますが、クワッドの上部に小さな白い線が残ります。私はそれが何であるかをかすかな考えを持っていません.

その他の詳細: マップしようとしている画像は 800 x 450 で、サイズ 1024 x 512 の画像にラップされています。クワッドを 800 x 450 のアスペクト比でスケーリングします。これが違いを生むとは思えませんが、決して知る!

御時間ありがとうございます。

編集:これは何が起こっているかの例です。

ここに画像の説明を入力

これは、完全にマッピングされた完全なイメージです (X と Y が 0 から 1)。青い部分は高さ 200 ピクセルで、イメージ全体は高さ 300 ピクセルです。

ここに画像の説明を入力

2 番目のイメージは、Y 軸の 3 分の 2 (つまり、Y で 0 から 0.6666) にマップされたイメージです。これにより、上部の白が削除されるはずですが、それは起こっていることではありません. オンラインでいくつかのチュートリアルのマッピングを取得したため、座標が前後しているとは思いません。

4

2 に答える 2

2

時々逆に動作しているように見えますが、非常に不明確です。

OpenGL は、左下がビューポートの原点であり、テクスチャ座標が S 方向、次に T 方向のフラット メモリ テクセル値に「沿って」実行されると想定します。本質的に、これは、通常のマッピングの 1 つでは、ほとんどの画像操作プログラムで見られる左上の原点とは対照的に、テクスチャの原点が左下にあることを意味します。

したがって、あなたの場合、表示される白いマージンは、おそらく、配置する必要がある上部ではなく、下部のテクスチャ イメージに適用したパディングです。とにかく NPO2 テクスチャを使用できないのはなぜですか? それらは広く支持されています。

于 2012-08-16T18:41:23.797 に答える
0

あなたの問題に対する本当の解決策ではありませんが、問題を回避する方法かもしれません:

画像を 1024x1024 にスケーリングし (画像を変形させます)、0->1 のテクスチャ座標を使用できます。クワッドのアスペクト比は 800x450 なので、画像は正しく表示されるはずです。

于 2012-08-16T17:03:40.203 に答える