三维空间中物体在平面上的透视投影



想象在虚拟人和物体之间有一个平面。该对象是一个具有特定xyz缩放和旋转的盒子。飞机就像一扇玻璃窗。这个人正透过平面看物体。摄像机正从一个不同的角度拍摄整个场景。

我想把物体的轮廓以人看到它的方式画在平面上,就好像他在窗户上画物体的另一边的轮廓。

我如何转换对象,使其顶点在平面上正确结束?

我知道如何做一个点到平面的正交投影,但在这种情况下,我想我需要透视投影。当物体移动到更远的地方时,它的投影也需要根据观察者的视角来调整大小和位置。

我想只要有人解释一下我需要采取的步骤,我就能弄清楚代码。

  1. 创建以人眼为中心的三维坐标系统。编写函数将点从一个系统转换到另一个系统。您还可以将另一个系统绑定到该对象。请记住,创建一个系统只不过是编写系统原点的坐标和其他默认坐标系中的坐标轴。例如:System_human_eye = {Point3f Origin(10,0,3), Xaxis(1,0,0), Yaxis(0,1,0), Zaxis(0,0,1)}

  2. 在人眼系统中,求出物体顶点与平面法线的坐标。平面方程为p, normal=D,其中D是到平面的距离,p是平面点,normal是平面法线。人眼到顶点的光线是k*[x, y, z];随着k的变化,你沿着射线移动。现在你所要做的就是沿着这条射线移动直到它与平面相交,也就是

    k*[x, y, z]。normal = D;找到k,恢复点p=k*[x, y, z]这将得到射线与平面的交点;

  3. 将人眼系统的所有交叉点转换为相机系统;

  4. 使用openGL或光线追踪将这些坐标投影到屏幕上。因为直线在透视投影后仍然是直线,所以如果你的物体由直线组成,你可以只使用它们。因此,您所需要的只是投影线端点并将它们重新连接为屏幕上的线。

一般来说,您想要做一个透视图投影。

然而,这涉及到大量的理论和数学,你必须理解。如果你想做一些更简单的事情,对于对象中的每个顶点,只需计算连接眼睛和顶点的线,然后将其与平面相交。

最新更新