将3D点转换为2D点?

时间:2012-09-05 17:30:40

标签: javascript actionscript-3 flash 3d

假设:

p1 = (-10,  2, -0.01)
p2 = (-20, -2, -0.03)

我试图在3D矩形中表示这些点,其中我有3D矩形的宽度,高度和深度。这里,投影类型是正交的,它是笛卡尔坐标系统

通过将p1和p2转换为2D,我想绘制线条。

知道怎么办?

这是图片

enter image description here

2 个答案:

答案 0 :(得分:2)

您要找的是orthographic projection。理解起来比一般perspective projection更简单,尽管你也可能想要研究它。

理解正交投影的直观方法:三维坐标系中的每个轴(例如,示例中的H轴,W轴和D轴)都有一个2d 方向向量屏幕坐标(即用于绘图的(x,y)坐标):

let:  H-axis direction vector = (hx, hy)
      W-axis direction vector = (wx, wy)
      D-axis direction vector = (dx, dy)

and:  origin screen position = (ox, oy)

要了解这些方向向量的含义:如果绘制H轴,并用(H=0, H=1, H=2, ...)的tics标记,那么hx是连续抽动之间x坐标的差异, hy是连续抽搐之间y坐标的差异。因此,您可以通过播放方向向量来更改任何轴的方向和比例(独立于其他轴!)。

选择原点和方向矢量后,您可以将屏幕坐标(x, y)计算为:

      x = H * hx + W * wx + D * dx + ox
      y = H * hy + W * wy + D * dy + oy

此公式的高度规则乘法/加法结构基本上是matrix multiplication

[ x y ]  =  [ H W D 1 ] * [ hx hy ]
                          [ wx wy ]
                          [ dx dy ]
                          [ ox oy ]

答案 1 :(得分:0)

我使用了以下几点,因为它们更容易使用:

p1 = (50, 100, 0)
p2 = (200, 250, 50)

要创建3D矩形(立方体),您需要完成以下几个步骤:

  • 将两个点转换为多维数据集的角点。例如,前右下角的前后坐标为p1,水平坐标为p2
  • 使用投影公式进行正投影。最简单的形式是:
2D       3D
x   =   x + z
y   =   y - z
  • 组成立方体所包含的线条,例如底部前水平线等

我不知道ActionScript,但这里有一个可以帮助你的概念证明:http://jsfiddle.net/3NLVe/