0

给定 3D 场景中 X/Y 平面(世界空间)中的轴对齐均匀网格,以及从某个位置和方向查看该网格的虚拟相机。如何计算沿视线移动相机所需的距离,以便将其中一个网格单元投影到屏幕上的一个像素上(填充一个屏幕像素)?摄像机投影参数(视场、近和远剪辑平面)以及屏幕的宽度和高度是已知的。

此基本距离用于确定渲染/光线投射高度图(高程值的统一网格)的详细程度。我尝试实现的算法在 Tevs 等人的论文“用于快速、准确和可扩展的动态高度场渲染的最大 Mipmaps”中进行了描述,2008 年(参见第 3.3 节)。在光线投射期间,将相机与光线交点之间的当前距离与基本距离进行比较。如果当前距离小于基本距离,则渲染更高级别的细节(更低的 mipmap 级别)。如果当前距离大于基本距离,则渲染较低级别的细节(较高的 mipmap 级别)。

4

1 回答 1

0

您可以离开单元格的“屏幕空间几何错误”。这是一种启发式方法,用于计算球体在屏幕上的透视投影的“误差”。根据启发式,当包围几何体的球体高度(以像素为单位),即投影在屏幕上的透视,大于容差时,您需要增加几何体的详细程度。

以下等式用于计算球体的几何误差:

err_s = (diam_s / dist_s) * yres / (2.0 * tan(fov/2.0))

其中err_s是投影在屏幕上的球体的垂直像素数,是球体diam_s的直径(每个球体都是常数),dist_s是从球体中心到相机的欧几里德距离,y_res是垂直屏幕分辨率,单位为像素,fov是相机的视野,以弧度为单位。

由于您已经知道err_s(1 像素) 的值,您可以dist_s通过以下方式计算:

dist_s = (diam_s / err_s) * yres / (2.0 * tan(fov/2.0))

同样,这是一种启发式近似(当球体投影在屏幕中心时更准确),但效果很好。

于 2022-02-14T18:00:03.613 回答