【问题标题】:Perspective projection of an object on a plane in 3D物体在 3D 平面上的透视投影
【发布时间】:2011-07-09 17:00:16
【问题描述】:

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

我想以人们看到的方式在平面上绘制对象的轮廓,就好像他在窗户上绘制另一侧对象的轮廓一样。

如何转换对象,使其顶点正确地出现在平面上?

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

如果有人解释我需要采取的步骤,我想我可以找出代码。

【问题讨论】:

    标签: 3d projection perspective plane


    【解决方案1】:
    1. 创建以人眼为中心的 3D 坐标系。编写函数将点从一个系统转换到另一个系统。您可能还有另一个系统与该对象相关联。请记住,创建系统只不过是在其他默认坐标系中写入系统原点和轴的坐标。例如: System_human_eye = {Point3f 原点(10, 0, 3), Xaxis(1, 0, 0), Yaxis(0, 1, 0), Zaxis(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 或光线追踪将这些坐标投影到屏幕上。由于直线在透视投影后保持笔直,如果您的对象由线组成,您可以只使用它们。因此,您只需投影线端点并将它们重新连接为屏幕上的线。

    【讨论】:

    • 已经有一段时间了,我不知道这个问题仍然悬而未决。你所描述的基本上是我当时的想法。感谢您的详细回答。
    【解决方案2】:

    一般来说,你想做一个perspective projection

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

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 2012-11-07
      • 2019-11-10
      • 2012-08-19
      • 2013-11-09
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多