私が作っているMinecraftのようなゲームでは、キューブに白い縁ができます。
暗いテクスチャではより顕著になります。テクスチャは次のように設定されています:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
助けがありますか?
私が作っているMinecraftのようなゲームでは、キューブに白い縁ができます。
暗いテクスチャではより顕著になります。テクスチャは次のように設定されています:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
助けがありますか?
回答:
このタイプの問題には、どの問題であるかによって2つの原因が考えられます。両方をリストします:
これは、この場合の問題のように見えます。エッジピクセルはすべて、テクスチャにもっともらしい3色(白、黒、茶色)の1つであるためです。
単一のテクスチャ(テクスチャアトラス)で複数のタイルイメージを隣り合わせに使用している場合、これは避けられないことです。GPUが三角形のエッジに沿った補間とテクスチャに沿った補間を完全に一致させず、隣接するテクスチャのビットを少し取得するために発生します。
できることはたくさんあります。
CLAMP[_TO_EDGE]
していますが、テクスチャアトラスを意識した方法で、タイルのエッジのほとんどがテクスチャのエッジにないため、使用しても効果がありません。)これは私自身のエントリで使用するソリューションですジャンルでは、キューブ。より多くのテクスチャメモリを使用することを除いて、特に不利な点はありません。隙間から緑の地面が見えないため、これはこの場合の問題ではないと思いますが、完全性のためにそれを含めています。
これは、隣接するタイルのミーティングエッジの頂点にまったく同じ座標を提供していない場合に発生する可能性があります。これは通常、浮動小数点エラーが原因で発生します。たとえば、サイズ0.6のタイルを持っている場合とで、タイルの右端を計算するx=100
と(100*0.6) + 0.6
、とのタイルの左エッジx=101
とは(100*0.6)
、あなたは正確に同じ答えを得ることはありません、その差は少し斑点として表示することができギャップ。
解決策は、算術の一貫性を確保することです。これを行ういくつかの方法は次のとおりです。
index*size + size
ではなく、唯一のコンピューティングであることを確認してください(index+1)*size
。