Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL,在基于平铺的游戏中缩小_Opengl_2d_Zooming - Fatal编程技术网

OpenGL,在基于平铺的游戏中缩小

OpenGL,在基于平铺的游戏中缩小,opengl,2d,zooming,Opengl,2d,Zooming,如果你有一个基于2D瓷砖的游戏,你想让玩家缩小(并看到更多的世界),你将如何实现它 通常情况下,我只渲染在游戏的GlorTo视图中可见的瓷砖,但是如果我允许缩放,那么浮点精度会破坏尝试使所有东西对齐的过程(相信我,这比听起来要困难得多)。是渲染整个世界的正确解决方案,并让OpenGL处理不渲染不可见内容的问题吗?您可以通过发送稍微大一点的区域来进行渲染,该区域肯定适合您的视图,但还不够大 您的问题没有提到2D是否允许相机旋转。可见区域可以表示为平铺空间中的边界矩形: Width_In_Tiles

如果你有一个基于2D瓷砖的游戏,你想让玩家缩小(并看到更多的世界),你将如何实现它


通常情况下,我只渲染在游戏的GlorTo视图中可见的瓷砖,但是如果我允许缩放,那么浮点精度会破坏尝试使所有东西对齐的过程(相信我,这比听起来要困难得多)。是渲染整个世界的正确解决方案,并让OpenGL处理不渲染不可见内容的问题吗?

您可以通过发送稍微大一点的区域来进行渲染,该区域肯定适合您的视图,但还不够大

您的问题没有提到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);

我会将瓷砖渲染为纹理,然后使用比屏幕大一个瓷砖宽度的四边形渲染整个场景。将一个四边形变换为以平铺宽度为模的全局位置。然后opengl的内置纹理过滤将处理抖动。这也有潜在的速度优势。不必在每个帧上渲染屏幕上的所有平铺,只需沿纹理的周长渲染新可见的平铺,偶尔(当屏幕边缘穿过平铺边界时)还需要渲染纹理的内容


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

为什么需要对齐?我的意思是,对齐它,以便在放大/缩小时,对象的位置不会抖动。