将3D点投影到2D点

时间:2012-04-04 01:02:54

标签: java 3d projection perspective

我知道这是一个常见的问题,网上有很多资源,这里有几个问题处理这个方面,但我找不到我需要的东西。所以,事先道歉,这里是:

我有一个需要转换为2D点的3D点

我有:
点位置(Px,Py,Pz)
摄像机位置(Cx,Cy,Cz)
相机方向(我可以控制它,但我不知道如何表示它)

我试图按照维基百科指南 - http://en.wikipedia.org/wiki/3D_projection#Perspective_projection

我的问题是:
我该如何表示相机方向?
如何从维基百科指南计算Ex,Ey,Ez的值,“观察者相对于显示表面的位置”
还有什么我应该知道的吗?

2 个答案:

答案 0 :(得分:0)

旧的教程非常棒,主要来自T& L和着色器之前的日子,甚至在硬件渲染之前。首先要了解它们,即/technical/math-and-physics/3d-matrix-math-demystified-r695">http://www.gamedev.net/page/resources//technical/math-and-物理/ 3d-matrix-math-demystified-r695。然后继续申请相机:http://www.codeguru.com/cpp/misc/misc/graphics/article.php/c10123/Deriving-Projection-Matrices.htm

基本上,你翻译然后围绕相机旋转整个“宇宙”。所以你有自己的观点:为摄像机定义平移(移动),然后定义旋转矩阵。您将它们应用于任何“世界内容”,即您的观点。然后,您可以“作弊”并简单地将x和y值除以z以投影到2d平面,但您应该真正进行正确校正视野的计算。

答案 1 :(得分:0)

如果使用Java bindings编译Opencv,可以使用[Calib3d模块](http://docs.opencv.org/java/2.4.4/org/opencv/calib3d/Calib3d.html#projectPoints(org.opencv.core.MatOfPoint3f,org.opencv.core.Mat,org.opencv.core.Mat,org轻松完成。 opencv.core.Mat,org.opencv.core.MatOfDouble,org.opencv.core.MatOfPoint2f))