gpt4 book ai didi

opengl-es - 基于 2D 平铺的引擎 : pixel "snapping" when in motion, 近似错误中的 OpenGL 行为?

转载 作者:行者123 更新时间:2023-12-04 20:56:57 28 4
gpt4 key购买 nike

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

我正在 OpenGL ES 中编写一个基于 2D tile 的引擎,目的是让它看起来像一个老式的光栅引擎。我的艺术 Assets 都是原始分辨率(即 1:1 像素艺术)并映射到矩形多边形上,并且我的 OpenGL View 是正交的并且跨越矩形 (0.0, 0.0) 到 (screen.width, screen.height )。我这样做是希望显示器上的每个像素都对应于 XY 坐标平面中的一个“虚拟”像素方块,而后者又对应于我的一个图块上的一个像素。 (瓦片是16.0 x 16.0,我的世界的原点显然是[0.0,0.0]。)

由于近似误差,我确信我的引擎看起来是“假的”。例如,我认为由于 tile 像素没有直接写入显示器,因此有时可能会获取不正确的像素。我还确信,只要图块与实际显示像素不对齐,相机运动就会导致 OpenGL 进行插值。

事实证明,OpenGL 的行为几乎与光栅引擎完全一样。当相机静止时,每个虚拟像素完美对应显示器上的一个像素。当相机运动时,瓦片一次“捕捉”一个像素行/列,而不是通过插值平滑移动。 (即使运动很慢也会发生这种情况。)出于好奇,我尝试将我的瓷砖缩放到 1.1 倍,正如我所料,它们开始看起来很浑浊,捕捉行为停止了。那么,OpenGL 的行为是否真的取决于它渲染的内容是否可以与显示器完美对齐?

我可以在规范中的何处找到有关这些问题的信息,以及如何确保 OpenGL 继续以这种方式运行?使用我不太了解的默认设置让我感到不舒服,因为理论上该行为可能随时发生变化。

谢谢!

最佳答案

Where in the spec can I find information about this behavior, and how can I ensure that OpenGL continues behaving this way?



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

I feel uncomfortable using a default that I don't quite understand, since the behavior could theoretically change at any time.



对。据我了解,在您的情况下,行为是明确定义的。但是,请记住,规范为实现提供了一定的自由度,因此结果可能因一种实现而异。例如,在网格的 x1.1 缩放或 20 度旋转中,边缘的精确分级已经实现定义。

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

关于opengl-es - 基于 2D 平铺的引擎 : pixel "snapping" when in motion, 近似错误中的 OpenGL 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4458667/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com