透视投影 - 帮助一个菜鸟

14 java opengl projection

我希望确定3D空间(x,y,z)中点的2D屏幕坐标(x,y).

我希望投射的点是由GPS坐标和海拔高度表示的真实世界点.

例如:Point(Lat:49.291882,Long:-123.131676,Height:14m)

摄像机位置和高度也可以确定为ax,y,z点.我还有相机的标题(罗盘度),它的倾斜度(地平线上方/下方)和滚动(绕z轴).

我没有3D编程的经验,因此,我已经阅读了透视投影的主题,并了解到它需要矩阵,变换等知识 - 所有这些都使我目前感到困惑.

有人告诉我,OpenGL可能用于构建真实世界点的3D模型,设置相机方向并检索3D点的2D坐标.

但是,我不确定使用OpenGL是否是解决此问题的最佳解决方案,即使它是我不知道如何创建模型,设置相机等

有人可以提出解决问题的最佳方法吗?如果OpenGL是一个可行的解决方案,我必须使用OpenGL ES,如果这有任何区别.哦,无论我选择哪种解决方案,都必须快速执行.

谢谢你的帮助

rof*_*kel 13

这是一个非常一般的答案.假设相机处于(Xc,Yc,Zc)并且您要投影的点是P =(X,Y,Z).从摄像机到投影到的2D平面的距离为F(因此平面的方程为Z-Zc = F).投影到平面上的P的2D坐标是(X',Y').

然后,非常简单:

X'=((X-Xc)*(F/Z))+ Xc

Y'=((Y-Yc)*(F/Z))+ Yc

如果您的相机是原点,那么这简化为:

X'= X*(F/Z)

Y'= Y*(F/Z)

  • @rofrankel如果我想用Z = 0投影点怎么办? (3认同)
  • 前两个方程不应该是“X” = ((X - Xc) * (F/(Z-Zc))) + Xc` 和“Y” = ((Y - Yc) * (F/(Z- Zc))) + Yc`? (2认同)

Jud*_*den 5

您确实需要透视投影,而矩阵运算大大简化了这样做。我假设您已经意识到您的球坐标必须转换为笛卡尔坐标才能进行这些计算。

使用OpenGL可能会为您节省大量的工作,而不是滚动您自己的软件光栅化器。所以,我建议先尝试一下。您可以在 PC 上对您的系统进行原型设计,因为只要保持简单,OpenGL ES 就没有太大不同。