2

第一次在堆栈交换上提出问题,希望这是正确的地方。

我似乎无法为我的情况开发足够接近的近似算法,因为我在 3D 数学方面并不是最好的。

我有一个 3d 环境,我可以在其中访问任何对象(包括我的相机)的位置和旋转,以及从任意两个点运行跟踪线以获得点和碰撞点之间的距离。我也有我的相机的视野。但是,我没有任何形式的访问世界/视图/投影矩阵的权限。

我还有一组 2d 图像,它们基本上是一组来自相机的 3d 环境的屏幕截图,每个集合都是从相同的点和角度拍摄的,平均集合是从大约 60 度角的平均角度拍摄的地平线。

我已经能够使用“注册点实体”,它可以放置在代表 2d 图像角落的 3d 世界中,然后当在 2d 图像上拾取一个点时,它被读取为坐标范围为 0-1,然后在注册点的 3d 位置之间进行插值。这似乎效果很好,但前提是图像是一个完美的自上而下的角度。当相机倾斜并引入另一个维度的透视时,结果变得更加不准确,因为没有补偿这个透视。

我不需要能够计算一个点的高度,比如摩天大楼上的一个窗口,但至少是图像平面底部的坐标,或者如果我从图像中延伸出一条线指定的图像空间点如果没有任何阻碍,我至少需要线与地面相交的点。

我发现的所有关于这方面的材料都说只是使用世界/视图/投影矩阵来解投影点,我发现它本身很简单,除了我无法访问这些矩阵,只是我可以在屏幕截图时收集的数据和其他算法使用我根本不掌握的复杂数学。

这样做的一个最终目标是能够在用户单击图像的 3d 环境中放置标记,而不能从用户的视图中运行简单的反投影。

任何帮助将不胜感激,谢谢。

编辑: Herp derp,虽然由于我的情况的限制,我这样做的实现有点奇怪,但解决方案基本上归结为 ananthonline 关于简单地重新计算视图/投影矩阵的答案。

4

1 回答 1

0

在相机的位置、旋转和 FOV 之间,您是否可以不计算相机的视图/投影矩阵 (songho.ca/opengl/gl_projectionmatrix.html) - 从而允许您取消投影已知的 3D 点?

于 2012-05-14T19:41:32.090 回答