1

2D タイル ベースのゲームを持っていて、プレイヤーがズームアウトできるようにしたい (そして世界をもっと見たい) 場合、どのように実装しますか?

通常は、ゲームの glOrtho ビュー内に表示されたタイルのみをレンダリングしますが、ズームを許可すると、すべてを整列させようとすると浮動小数点の精度が台無しになります (思ったよりもずっと難しいと思います)。全世界をレンダリングし、見えないものをレンダリングしないという心配を OpenGL に処理させる正しい解決策はありますか?

4

2 に答える 2

0

タイルをテクスチャにレンダリングしてから、画面より1タイル幅大きい1つのクワッドでシーン全体をレンダリングします。その1つのクワッドを、タイル幅を法とするグローバル位置として変換します。次に、openglの組み込みテクスチャフィルタリングがジッターを処理します。これには、潜在的な速度の利点もあります。フレームごとに画面上のすべてのタイルをレンダリングするのではなく、新しく表示されるようになるテクスチャの周囲に沿ってタイルをレンダリングするだけでよく、場合によっては(画面の端がタイルの境界を越えるときに)必要になります。テクスチャの内容をブリットします。

ズームについては、同様のアイデアを使用できますが、ミップマップを使用します。

于 2012-11-13T07:16:31.423 に答える
0

少し大きな領域をレンダリングするために送信することで回避できます。これは確かにビューに収まりますが、世界全体としては十分な大きさではありません.

あなたの質問では、2D でカメラの回転が許可されているかどうかは言及されていません。可視領域は、タイル スペース内の境界四角形として表すことができます。

Width_In_Tiles := RoundUp(View_Width_In_Px / Single_Tile_Width_In_Px * Zoom);
Left_Margin := Center_Of_View - RoundUp(Width_In_Tiles / 2);
Right_Margin := Center_Of_View + RoundUp(Width_In_Tiles / 2);

//same for vertical axis

//Naive example
for K := Top_Margin to Bottom_Margin do
  for I := Left_Margin to Right_Margin do
    RenderTilesAndObjects(I, K);
于 2012-11-12T07:20:16.670 に答える