如何将 2D 水平Oxy平面上的点渲染为 2D 垂直电话平面上的点?

问题描述

我正在尝试将(经度/纬度)位置转换为手机屏幕上的矩形。但是现在让我们假设它们是 Oxy 平面上的法线点。

假设相机位于 (X,Y) 点,对应于手机屏幕的中心。它指向 (vx,vy) 方向,具有 60 度视锥(顺时针 30 度和逆时针 30 度)。相机方向可以自由旋转,所以vx,vy in [-1 -> 1]

有一个 N(x[],y[]) 的列表,每个点代表一个位置。

在每一步,视野内的所有点都被选中,称它们为 (px[],py[])。这一步是simple。接下来,我需要在手机屏幕上绘制 (px[],py[])。最大的问题是当相机+两点共线时。我对如何处理这个问题一无所知。编辑:两个点都必须显示在屏幕上,所以可能会添加一些随机偏移量?

给定相机位置、相机观察方向和点 px[i],py[i],它在屏幕上的像素坐标是多少?如果没有足够的信息,那么任何可以处理共线情况的方法都可以。

编辑:

enter image description here

enter image description here

图 1 显示了一个示例。给定点 + 相机位置/方向,点 1,2,3,4 在视觉中。然后,它们显示在屏幕上,如图 2 所示。

2D 的可能解决方案(屏幕上没有 3D 的错觉):

  1. 水平位置:使用与摄像机方向的角度来确定其是否在屏幕的左侧/右侧。使用最大角度对角度进行归一化。归一化角度 (0->1) 用于确定该点向左/向右的距离,其中 normAngle = 0 表示位于屏幕中间,normAngle = 1 表示位于最左侧/屏幕最右边的像素。

  2. 垂直位置:与上述相同,但使用与相机的归一化距离,而不是与相机方向的角度。

有没有更好的方法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)