OpenGL,在基于图块的游戏中缩小

时间:2012-11-12 01:13:17

标签: opengl 2d zooming

如果您有一个基于2D平铺的游戏,并且您希望允许玩家缩小(并查看更多的世界),您将如何实现它?

通常情况下,我只渲染游戏glOrtho视图中可见的图块,但如果我允许缩放,那么浮点精度就会破坏试图让一切都对齐(相信我的声音比听起来要难得多) 。是渲染整个世界的正确解决方案,让OpenGL处理​​不渲染不可见的问题吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我会将贴图渲染到纹理,然后使用一个四边形渲染整个场景,该四边形的宽度大于屏幕。将一个四边形转换为模块宽度的全局位置。然后opengl的内置纹理过滤将处理抖动。这也具有潜在的速度优势。您不必在每个帧的屏幕上渲染所有切片,而只需沿着纹理的周边渲染切片,这些切片会变得新近可见,偶尔(当屏幕边缘穿过切片边界时),您必须blit纹理的内容。

对于缩放,您可以使用类似的想法,但使用mipmapping。