我已经阅读了一些文章甚至是堆栈溢出的问题。我没有找到我想要的东西。我可能没有仔细查看,所以如果你知道的话,请指出我更正的文章/问题。
任何方式,我想要做的是清楚。我知道相机的位置(x',y',z')我有相机旋转矩阵(Matrix3)。我还有相机宽高比(W / H)和输出尺寸(W,H)。我的POINT位于(x,y,z),我想要一个代码或(一个算法,所以我可以编写代码)来计算它在屏幕上的位置(屏幕的大小与相机输出的大小相同) )as(x'',y'')。
你知道任何有用的文章吗?我对支持相机旋转矩阵的文章或算法非常重要。
谢谢大家。
答案 0 :(得分:1)
你需要先指定投影类型(ortogonal,perspective ......?)
将任意点(x,y,z)
转换为相机空间
减去摄像机位置然后应用摄像机方向(坐标系)矩阵的逆。 Z
相机轴通常观看方向。如果你使用4x4同质矩阵,那么减法已经在其中,所以不要两次!
应用投影
正交投影只是比例矩阵。透视预测更复杂,因此谷歌为他们。这是应用宽高比的位置,也是 FOV (视野)视角。
剪辑到屏幕和Z缓冲区空间
现在您在投影相机空间中有x,y,z
。要实际获取具有透视的屏幕坐标,您必须除以z
或w
坐标(取决于所使用的数学和投影),因此对于3x3矩阵
xscr=x/z;
yscr=y/z;
这就是为什么投影的z-near必须是> 0
! (否则可能导致除零)
渲染或处理像素(x,y)
有关详细信息,请参阅:Mathematically compute a simple graphics pipeline
<强> [注释] 强>
如果您查看 OpenGL 教程/参考或任何 3D 矢量数学渲染,您会发现很多东西。谷歌同源变换矩阵或同质坐标。
答案 1 :(得分:0)
我并不完全确定你想要达到的是什么,但我认为你试图让一个平面(一个屏幕)的表面排成一个亲戚尺寸到另一架飞机。要计算此比率,您应该查看Gaussian Surfaces。还有很多触发器。希望这会有所帮助。
答案 2 :(得分:0)
我认为你没有足够的信息来执行计算!
您可以将相机视为针孔相机。它由一个图像平面和一个点,所有光照射到图像平面上。通常,图像平面是矩形的,所有入射光所来自的点都是从图像平面中心开始的图像平面的法线。
有了这些限制,您需要以下内容: - 相机的中心位置 - 两个矢量(彼此垂直)定义图像平面的大小和姿态 - 该点与相机平面的距离(这可称为焦距,即使它严格来说不是同一个事物)
(实际上有几种方法可以表达这些数量,例如,。)
如果您只有像素和相机旋转的图像平面的位置和大小,则缺少比例因子。在现实世界中,这相当于知道你拿着相机的位置和指向它的位置,但不知道焦距(变焦设置)。
有很多文献可供使用,首先是搜索结果:
http://www.cse.psu.edu/~rcollins/CSE486/lecture12_6pp.pdf
也许这有助于您找到正确的搜索字词。