Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 es 基于二维平铺的引擎中的OpenGL行为:pixel“;“抓拍”;运动时,近似误差?_Opengl Es_Raster - Fatal编程技术网

Opengl es 基于二维平铺的引擎中的OpenGL行为:pixel“;“抓拍”;运动时,近似误差?

Opengl es 基于二维平铺的引擎中的OpenGL行为:pixel“;“抓拍”;运动时,近似误差?,opengl-es,raster,Opengl Es,Raster,让我看看我能否清楚地问这个问题: 我正在用OpenGL ES编写一个基于2D瓷砖的引擎,目的是使它看起来像一个老式的光栅引擎。我的艺术资源都是本机分辨率(也就是说,1:1像素的艺术)并映射到矩形多边形上,我的OpenGL视图是正交的,跨越矩形(0.0,0.0)到(screen.width,screen.height)。我这样做的目的是希望显示器上的每个像素都对应于XY坐标平面中的“虚拟”像素正方形,这反过来又对应于我的一块瓷砖上的一个像素。(瓷砖是16.0 x 16.0,我的世界的起源显然是[0

让我看看我能否清楚地问这个问题:

我正在用OpenGL ES编写一个基于2D瓷砖的引擎,目的是使它看起来像一个老式的光栅引擎。我的艺术资源都是本机分辨率(也就是说,1:1像素的艺术)并映射到矩形多边形上,我的OpenGL视图是正交的,跨越矩形(0.0,0.0)到(screen.width,screen.height)。我这样做的目的是希望显示器上的每个像素都对应于XY坐标平面中的“虚拟”像素正方形,这反过来又对应于我的一块瓷砖上的一个像素。(瓷砖是16.0 x 16.0,我的世界的起源显然是[0.0,0.0]。)

我确信我的引擎会因为近似误差而看起来“假”。例如,我认为,由于平铺像素不是直接写入显示器,所以偶尔会提取不正确的像素。我还确信相机的运动会导致OpenGL在瓷砖与实际显示像素不对齐时进行插值

事实证明,OpenGL的行为几乎与光栅引擎完全相同。当相机静止时,每个虚拟像素与显示屏上的一个像素完全对应。当相机处于运动状态时,瓷砖一次“捕捉”一个像素行/列,而不是通过插值平滑移动。(即使运动非常慢,也会发生这种情况。)出于好奇,我尝试将我的瓷砖缩放到1.1x,正如我所预料的,它们开始看起来很泥泞,捕捉行为停止。那么,OpenGL的行为是否会因其渲染的内容是否与显示完全一致而有所不同呢

我可以在规范中的什么地方找到关于这些问题的信息,如何确保OpenGL继续以这种方式运行?我对使用我不太理解的默认值感到不舒服,因为从理论上讲,这种行为随时都可能发生变化

谢谢大家!

我可以在规范中的什么地方找到有关此行为的信息,以及如何确保OpenGL继续以这种方式运行

您需要阅读规范中的整个“光栅化”章节。它准确地描述了保证什么以及OpenGL实现应该如何工作

我对使用我不太理解的默认值感到不舒服,因为从理论上讲,这种行为随时都可能发生变化

对。据我所知,在你的情况下,这种行为是明确的。但是,请记住,规范为实现提供了一些自由,因此不同的实现的结果可能会有所不同。例如,在网格的x1.1缩放或20度旋转中,已经定义了边缘的精确比率化

请注意,“捕捉”行为是预期的。您没有启用AA,因此OpenGL无法使移动更加平滑