Geometry 倾斜摄影机情况下的地形平铺比例

Geometry 倾斜摄影机情况下的地形平铺比例,geometry,rendering,visualization,terrain,Geometry,Rendering,Visualization,Terrain,我现在正在开发3d地形可视化工具。表面逻辑上覆盖着方形瓷砖。此平铺可以可视化为如下所示: 假设我想在这些瓷砖上画一幅画。需要根据为每个瓷砖单独计算的当前相机比例来选择图片的详细程度 如果是垂直摄像机(无倾斜,即摄像机垂直于地面),所有瓷砖都具有相同的比例,即摄像机焦距除以摄像机离地高度 下图描述了情况: 其中,红色三角形表示没有倾斜的摄像机,BG表示摄像机离地高度,EG表示焦距,然后scale=AC/DF=BG/EG 但如果相机有倾斜(即俯仰角不是0),则比例会在不同的瓷砖之间变化(甚至从点

我现在正在开发3d地形可视化工具。表面逻辑上覆盖着方形瓷砖。此平铺可以可视化为如下所示:

假设我想在这些瓷砖上画一幅画。需要根据为每个瓷砖单独计算的当前相机比例来选择图片的详细程度

如果是垂直摄像机(无倾斜,即摄像机垂直于地面),所有瓷砖都具有相同的比例,即摄像机焦距除以摄像机离地高度

下图描述了情况:

其中,红色三角形表示没有倾斜的摄像机,BG表示摄像机离地高度,EG表示焦距,然后scale=AC/DF=BG/EG

但如果相机有倾斜(即俯仰角不是0),则比例会在不同的瓷砖之间变化(甚至从点到点)

因此,我想知道在这种情况下,是否有任何方法可以为每个瓷砖生成合理的比例?

可能有(几乎肯定有)更简单的解决方案,但您可以做的是常规的世界到屏幕坐标转换

您只需获取平铺边界点的坐标,并计算这些像素将投影到屏幕上的哪个像素(当然,您可以获得浮点精度)。由此,我相信你可以计算出你提到的“规模”

这适用于世界空间中的任何点或点集

这是关于如何“用手”完成这项工作的教程

如果您使用OpenGL或DirectX渲染平铺,您可以轻松得多。

可能有(几乎肯定有)更直接的解决方案,但您可以做的是常规的世界到屏幕坐标转换

您只需获取平铺边界点的坐标,并计算这些像素将投影到屏幕上的哪个像素(当然,您可以获得浮点精度)。由此,我相信你可以计算出你提到的“规模”

这适用于世界空间中的任何点或点集

这是关于如何“用手”完成这项工作的教程


如果您使用OpenGL或DirectX渲染平铺,您可以轻松得多。

删除了“计算几何”标签,因为CG是一门特殊的学科,而不仅仅是使用几何进行计算。2d图表会很有帮助。感谢您的更正!我添加了一些图片来让它更清晰。删除了“计算几何”标签,因为CG是一门特殊的学科,而不仅仅是用几何计算。2d图表会很有帮助。谢谢你的更正!我添加了一些图片,让它更清晰。谢谢你的回答!我需要变换矩阵和投影矩阵来完成你所描述的。这些矩阵在我的情况下不可用。@deephace您没有相机的参数(或无法组成装配参数)?如果您使用的是OGL/DX,您可以免费获得这些。如果没有,(如果在教程I链接器中不清楚),internet上会有一些页面描述如何填写此类矩阵。假设我根本无法访问渲染管道。为了解决这个问题,我只想使用有关相机位置、离地高度、平铺中心和相机注视位置的信息,而不需要构造其他矩阵。@deephace您需要有关“相机”的信息。你需要考虑一下照相机的焦距。想象一张两个物体的照片,它们与物镜的距离非常不同。根据焦距的不同,这两个物体的大小比例会有很大的不同。广角镜头会使物体大小相似,但窄角镜头会使远处的物体小得多。在我看来,你能想出的任何公式都只是伪装的矩阵乘法(或者它只在一些简单的情况下有效——我在我的项目中尝试过类似的方法)。谢谢你的回答!我需要变换矩阵和投影矩阵来完成你所描述的。这些矩阵在我的情况下不可用。@deephace您没有相机的参数(或无法组成装配参数)?如果您使用的是OGL/DX,您可以免费获得这些。如果没有,(如果在教程I链接器中不清楚),internet上会有一些页面描述如何填写此类矩阵。假设我根本无法访问渲染管道。为了解决这个问题,我只想使用有关相机位置、离地高度、平铺中心和相机注视位置的信息,而不需要构造其他矩阵。@deephace您需要有关“相机”的信息。你需要考虑一下照相机的焦距。想象一张两个物体的照片,它们与物镜的距离非常不同。根据焦距的不同,这两个物体的大小比例会有很大的不同。广角镜头会使物体大小相似,但窄角镜头会使远处的物体小得多。在我看来,你能想出的任何公式都只是伪装的矩阵乘法(或者它只在一些简单的情况下有效——我在我的项目中尝试过类似的方法)。