想象一下,虚拟人和物体之间有一个平面。该对象是具有特定xyz缩放和旋转的框。飞机就像一扇玻璃窗。这个人正在通过飞机看物体。相机从不同角度观察整个场景。
我想把这个物体的轮廓画在人们看到它的方式上,好像他正在窗户上画出另一边的物体轮廓。
如何变换对象以使其顶点正确地在平面上结束?
我知道如何对点到平面进行正交投影,但在这种情况下我需要透视投影。当物体移动得更远时,其投影也需要根据观察者的角度调整大小和位置。
我想如果只有人会解释我需要采取的步骤,我可以弄清楚代码。
答案 0 :(得分:1)
创建一个以人眼为中心的3D坐标系。写函数将点从一个系统转换为另一个系统。您可能还有另一个系统绑定到该对象。请记住,创建系统只不过是在一些其他默认坐标系中编写系统原点和轴的坐标。例如: System_human_eye = {Point3f Origin(10,0,3),Xaxis(1,0,0),Yaxis(0,1,0),Zaxis(0,0,1)}
在人眼系统中,找到物体顶点和平面法线的坐标。平面方程是p.normal = D,其中D是到平面的距离,p是平面点,法线是平面法线。从人眼到顶点的光线是k * [x,y,z];当k改变你沿着光线旅行。你现在需要做的就是沿着光线行进直到它与平面相交,即
k * [x,y,z]。 normal = D; 找到k,恢复点p = k * [x,y,z],这将给出光线与平面的交点;
将人眼系统的所有交叉点转换为相机系统;
答案 1 :(得分:0)
通常,您想要perspective projection。
然而,这涉及到一大堆理论和数学,你必须了解一下。如果你想做一些更简单的事情,对象中的每个顶点只计算将眼睛连接到顶点的直线,然后将它与平面相交。