物体在 3D 平面上的透视投影

问题描述 投票:0回答:3

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

我想按照人们看到的方式将物体的轮廓绘制到平面上,就好像他在窗户上绘制另一侧物体的轮廓一样。

如何变换对象,使其顶点正确地位于平面上?

我知道如何进行点到平面的正交投影,但在这种情况下我想我需要透视投影。当物体进一步远离时,其投影也需要根据观看者的视角调整大小和位置。

我认为只要有人解释我需要采取的步骤,我就可以找出代码。

3d projection perspective plane
3个回答
1
投票
  1. 创建以人眼为中心的3D坐标系。编写函数将点从一个系统转换到另一个系统。您可能还有另一个系统与该对象绑定。请记住,创建系统只不过是在其他默认坐标系中写入系统原点和轴的坐标。例如: System_ human_eye = {Point3f原点(10, 0, 3), X轴(1, 0, 0), Y轴(0, 1, 0), Z轴(0, 0, 1) }

  2. 在人眼系统中,求物体顶点和平面法线的坐标。平面方程为p.normal=D,其中D是到平面的距离,p是平面点,法线是平面法线。人眼到顶点的光线为k*[x,y,z];当 k 改变时,你沿着射线行进。现在你需要做的就是沿着射线行进直到它与平面相交,即

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

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

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

1
投票

一般来说,您想要进行透视投影

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


0
投票

很抱歉让这个旧款重温,但你的想法正是我现在的计划。 它是关于可视化感知的主观性,我们所看到的是更高维度现实的投影。 如果您找到解决方案,我会很高兴听到。

© www.soinside.com 2019 - 2024. All rights reserved.