3d 物体在三维平面上的透视投影

3d 物体在三维平面上的透视投影,3d,projection,perspective,plane,3d,Projection,Perspective,Plane,想象一个虚拟人和一个物体之间有一个平面。对象是具有特定xyz缩放和旋转的长方体。飞机就像一扇玻璃窗。这个人正在通过飞机看这个物体。摄像机从不同的角度观察整个场景 我想把物体的轮廓画在平面上,就像他在窗户上画另一边物体的轮廓一样 如何变换对象,使其顶点正确地结束在平面上 我知道如何做点到平面的正交投影,但在这种情况下,我想我需要透视投影。当物体移动得更远时,它的投影也需要根据观察者的视角调整大小和位置 我想只要有人能解释我需要采取的步骤,我就能找出代码。一般来说,你需要做一个简单的测试 然而,这涉

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

我想把物体的轮廓画在平面上,就像他在窗户上画另一边物体的轮廓一样

如何变换对象,使其顶点正确地结束在平面上

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


我想只要有人能解释我需要采取的步骤,我就能找出代码。

一般来说,你需要做一个简单的测试

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

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

  • 在人眼系统中,查找对象顶点和平面法线的坐标。平面方程为p.normal=D,其中D是到平面的距离,p是平面点,normal是平面法线。从人眼到顶点的光线是k*[x,y,z];当k改变时,你沿着光线移动。你现在需要做的就是沿着射线移动,直到它与平面相交,也就是说

    k*[x,y,z]。正常=D; 找到k,恢复点p=k*[x,y,z],这将给出光线与平面的交点

  • 将人眼系统中的所有交点转换为摄像机系统

  • 使用openGL或光线跟踪在屏幕上投影这些坐标。由于透视投影后直线保持笔直,如果对象由直线组成,则可以使用它们。所以,您所需要的只是投影线端点,并在屏幕上将它们重新连接为线

  • 已经有一段时间了,我不知道这个问题还有待解决。你所描述的基本上就是我当时是怎么想出来的。谢谢你的详细回答。