想象在虚拟人和物体之间有一个平面。对象是一个具有一定 xyz 缩放和旋转的框。飞机就像一扇玻璃窗。该人正在通过平面查看对象。摄像机从不同的角度观察整个场景。
我想以人们看到的方式将对象的轮廓绘制到平面上,就好像他正在窗户上绘制另一侧对象的轮廓一样。
如何转换对象以使其顶点正确地出现在平面上?
我知道如何将点正交投影到平面,但在这种情况下,我猜我需要透视投影。当物体移动得更远时,它的投影也需要根据观察者的视角调整大小和位置。
我想只要有人解释我需要采取的步骤,我就能弄清楚代码。
想象在虚拟人和物体之间有一个平面。对象是一个具有一定 xyz 缩放和旋转的框。飞机就像一扇玻璃窗。该人正在通过平面查看对象。摄像机从不同的角度观察整个场景。
我想以人们看到的方式将对象的轮廓绘制到平面上,就好像他正在窗户上绘制另一侧对象的轮廓一样。
如何转换对象以使其顶点正确地出现在平面上?
我知道如何将点正交投影到平面,但在这种情况下,我猜我需要透视投影。当物体移动得更远时,它的投影也需要根据观察者的视角调整大小和位置。
我想只要有人解释我需要采取的步骤,我就能弄清楚代码。
创建以人眼为中心的 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] 。正常 = D;找到 k,还原点 p=k*[x, y, z] 这将为您提供射线与平面的交点;
将人眼系统的所有交叉点转换为摄像头系统;
一般来说,你想做一个透视投影。
然而,这涉及到大量的理论和数学,你必须弄清楚。如果您想做一些更简单的事情,对于对象中的每个顶点,只需计算将眼睛连接到顶点的线,然后将其与平面相交。