2

iOS用のピクセルパーフェクトゲームと思われるものを描いています:

ここに画像の説明を入力

問題は、数フレームごとに、別のテクスチャのランダムな部分が描画されているのが見えることです (黒に浮かぶティールのドット)。まず、クワッドがすべて完全に並んでいることを確認してみました。次に、Z バッファのサイズを変更しました。これらのことはどちらも役に立たないようでした。

テクスチャ アトラスを使用していますが、残念ながらパディング ピクセルを追加することはできません (私が見た 1 つの解決策)。ここで、テクスチャ座標を 0,1 から 0.005,0.95 に変更すると、問題はなくなりますが、ゴミのように見えます。

このスクリーンショットの動作は、私が関連付けていない別の解決策を示唆していますか? スプライト アートのフィルタリング モードは NEAREST のままにしておく必要があることに注意してください。また、キャラクター/カメラを強制的にピクセル単位で移動させると問題が解決することに注意してください (残念ながら、サブピクセル単位で移動するほど良くはありません)。

編集:次のようにUVを計算することにより、境界ではなくテクセルの「中央」をサンプリングしようとしました:

u = (pixelCoordX + 0.5) / pixelsInTexture
v = (pixelCoordY + 0.5) / pixelsInTexture

しかし、今ではすべてが壊れているように見えます。

編集:これを修正する方法がわからない場合でも、ピクセル座標全体ではなく小数ピクセル座標で発生する理由を理解したいと思います。ゲームはズームではなく、パンのみであるため、テクスチャタイルをどれだけオフセットしても、同じ幅のように見えます-同じ量のピクセルを照らします-そして、この奇妙なラッピングを実行しません.

編集: テクセル サンプリングがどのように機能するかを読んだ後、すべてのクワッドの非整数位置がテクスチャリングに影響を与えている理由をある程度理解しました...しかし、OpenGL が uv を使用することが「許可されている」と言っている決定的なドキュメントを見つけることができません私のドローコールで指定された範囲外の座標(テクスチャアトラスを使用しているため、[0,1]よりもはるかに小さい)。

4

1 に答える 1

2

手動でテクスチャ アトラスを作成するのは困難です。私は同じ問題に遭遇しました。テクスチャ アトラスですべてのテクスチャが正方形の場合、これが役立つ場合があります。

テクスチャ アトラスの座標は 0.0 ~ .1.0f です。私は 0.0-0.9999f を考えてより多くの成功を収めました

私の場合、256x256 ピクセルのテクスチャで 16x16 ピクセルの正方形を使用すると、16 行と 16 列になります。1/16 = 0.0625。最初のテクスチャ座標は 0.0 で始まり、次のテクスチャが始まる前に終わるので、0.0624 . テクスチャ 2 は 0.0625 で始まり、0.1249 で終わります。これを行うと、次のテクスチャから小さな斑点が取り除かれます。

視覚教材

私のテクスチャ マッピングは次のようになります。

//texture 1
{{0.0624f, 0.9376f},
{0.0624f, 0.9999f},
{0.0f, 0.9999f},
{0.0f, 0.9376f}},

//texture 2
{{0.1249f, 0.9376f},
{0.1249f, 0.9999f},
{0.0625f, 0.9999f},
{0.0625f, 0.9376f}}

また、次のものを使用していることを確認してください。

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
于 2013-09-17T18:55:42.247 に答える