三维投影
分类
平面几何投影
正交投影
正交投影是一系列用于显示三维物体的轮廓、细节或精确测量结果的变换方法。通常又被称作plan、截面图、鸟瞰图或立面图。
当视平面的法向(即摄像机的朝向)平行于笛卡尔坐标系三根坐标轴中的一根,数学变换定义如下: 若使用一个平行于y轴(侧视图)的正交投影将三维点ax{\displaystyle a_{x}}, ay{\displaystyle a_{y}}, az{\displaystyle a_{z}}投影到二维平面上得到二维点bx{\displaystyle b_{x}}, by{\displaystyle b_{y}},可以使用如下公式
其中向量s是一个任意的缩放因子,而c是一个任意的偏移量。这些常量可自由选择,通常用于将视口调整到一个合适的位置。该投影变换同样可以使用矩阵表示(为清晰起见引入临时向量d)
虽然正交投影产生的图像在一定程度上反映了物体的三维特性,但此类投影图像和实际观测到的并不相同。特别是对于相同长度的平行线段,无论离虚拟观察者(摄像机)远近与否,它们都会在正交投影中显示为相同长度。这会导致较近的线段看起来被缩短了。
透视投影
透视投影的定义更为复杂。可以将其理解为透过摄像机取景器对于被投影物体进行观察。摄像机的位置、朝向和视野都将影响投影变换的结果。我们定义以下变量来对这一变换进行描述:
ax,y,z{\displaystyle \mathbf {a} _{x,y,z}}:将被投影的三维空间中的点。
cx,y,z{\displaystyle \mathbf {c} _{x,y,z}}:摄像机的位置。
θ θ -->x,y,z{\displaystyle \mathbf {\theta } _{x,y,z}}:摄像机的旋转角度。当 cx,y,z{\displaystyle \mathbf {c} _{x,y,z}}=且 θ θ -->x,y,z{\displaystyle \mathbf {\theta } _{x,y,z}}=, 三维向量将被投影到二维向量。
ex,y,z{\displaystyle \mathbf {e} _{x,y,z}}:观测者相对显示平面的位置。
最终结果为:
bx,y{\displaystyle \mathbf {b} _{x,y}}:a{\displaystyle \mathbf {a} }所产生的二维投影。
首先我们定义点dx,y,z{\displaystyle \mathbf {d} _{x,y,z}}作为点a{\displaystyle \mathbf {a} }向摄像机坐标系所作的变换,其中摄像机坐标系由摄像机的位置c{\displaystyle \mathbf {c} }和旋转θ θ -->x,y,z{\displaystyle \mathbf {\theta } _{x,y,z}}所决定。该过程为:先用a{\displaystyle \mathbf {a} }减去c{\displaystyle \mathbf {c} },然后使用由− − -->θ θ -->{\displaystyle -\mathbf {\theta } }产生的旋转矩阵乘上该结果。该变换通常称为摄像机变换(注意该计算过程假设使用左手法则):
或者使用以下这种非矩阵表示的形式,其中角度的正负号与矩阵表示形式不同:
然后将变换后的该点通过以下方程投影到二维平面(此处投影平面为x/y平面,有时也使用x/z):
或在齐次坐标系下可以表示为:
和
观测者到显示平面的距离,ez{\displaystyle \mathbf {e} _{z}},直接关系到视野的大小。α α -->=2⋅ ⋅ -->tan− − -->1 -->(1/ez){\displaystyle \alpha =2\cdot \tan ^{-1}(1/\mathbf {e} _{z})}为可视角度。(这里假设屏幕的两角为(-1,-1)和(1,1))
如果要在一些特定的显示设备上显示该二维平面,之后还要进行一些必要的剪裁和缩放操作。
图示
计算三维空间中位于Ax,Az的点在屏幕坐标x轴的位置:
screen x coordinate (Bx) = model x coordinate (Ax)× × -->distance from eye to screen (Bz)distance from eye to point (Az){\displaystyle screen\ x\ coordinate\ (Bx)\ =\ model\ x\ coordinate\ (Ax)\times {\frac {distance\ from\ eye\ to\ screen\ (Bz)}{distance\ from\ eye\ to\ point\ (Az)}}}
对于y轴同样有:
screen y coordinate (By) = model y coordinate (Ay)× × -->distance from eye to screen (Bz)distance from eye to point (Az){\displaystyle screen\ y\ coordinate\ (By)\ =\ model\ y\ coordinate\ (Ay)\times {\frac {distance\ from\ eye\ to\ screen\ (Bz)}{distance\ from\ eye\ to\ point\ (Az)}}}
(其中Ax和Ay是透视转换前物体在空间中的坐标)
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值