4

私は iPhone 用のタイル ベースのゲーム エンジンを作成していますが、次の不具合を除けば、通常は動作します。基本的に、カメラは常にプレイヤーを画面の中央に保ち、プレイヤーに正しく追従するように移動し、静止しているときはすべてを正しく描画します。ただし、プレーヤーが移動している間、プレーヤーが歩いている表面のタイルは、次のようにグリッチします。

http://img41.imageshack.us/img41/9422/movingy.png

定常(正しい)と比較して:

http://img689.imageshack.us/img689/7026/still.png

なぜこれができるのか誰にも分かりますか?


これまでの回答に感謝します。浮動小数点エラーも私の最初の考えであり、タイルのサイズを少し大きくしようとしましたが、これは役に立ちませんでした. glClearColor を赤に変更しても黒いギャップが残るため、浮動小数点エラーではない可能性があります。一般にタイルは異なるテクスチャを使用するため、頂点配列を使用できるかどうかはわかりません (配列内のすべてに同じテクスチャを適用する必要があると常に考えていました。間違っていたら訂正してください)。 VBO が OpenGL ES で利用できるとは思わないでください。フィルタリングを最近傍に設定すると改善されますが、グリッチはまだ 10 フレームごとに発生し、ピクセル単位の結果は、とにかくこのソリューションが実行できないことを意味します。

私が現在行っていることと過去に行ったことの主な違いは、今回はワールド内の静止オブジェクトではなくカメラを動かしていることです (つまり、タイル、プレイヤーはまだ移動しています)。カメラを移動するために使用しているコードは次のとおりです。

void Camera::CentreAtPoint( GLfloat x, GLfloat y )
{
 glMatrixMode(GL_PROJECTION); 
 glLoadIdentity();
 glOrthof(x - size.x / 2.0f, x + size.x / 2.0f, y + size.y / 2.0f, y - size.y / 2.0f, 0.01f, 5.0f);
 glMatrixMode(GL_MODELVIEW);
}  

このように物事を行うことに問題はありますか?もしそうなら解決策はありますか?

4

3 に答える 3

2

私の最初の推測は、float rounding errorです。これにより、クワッドの座標が少しずれて、ギャップが発生する可能性があります。これを確認するには、glClearColor() を変更して、ギャップの色が変わるかどうかを確認してください。

これに対する 1 つの解決策は、タイルを少し大きくすることです。この種のエラーをカバーするには、非常に小さな増分 (0.0001f など) が必要です。

または、Vertex ArrayまたはVBOを使用してグラウンド メッシュを保存することもできます (隣接する正方形が頂点を共有するようにします)。これで問題が解決することを期待していますが、100% 確実ではありません。レンダリングも高速になるはずです。

于 2009-12-16T07:12:42.453 に答える
0

フィルタリングが原因です..エッジにクランプを使用し、1 または 2 ピクセルの境界線を残します..これが、glTexImage 呼び出しで BORDER のオプションがある理由です..


0 から 1 への 4 番目のパラメーター変更

于 2009-12-30T14:22:52.587 に答える
0

これは、境界テクセルのフィルタリングの問題が原因である場合があります。テクスチャ パラメータで GL_CLAMP_TO_EDGE を使用してみてください。

于 2009-12-16T07:21:56.600 に答える