away3D右手系转左手系总结

本文深入探讨了3D模型从右手坐标系到左手坐标系的转换方法,详细解析了顶点数据、旋转和平移的转换原理,以及投影矩阵在不同坐标系下的变化。同时,提供了具体实例和AGAL代码示例,帮助读者理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

away3D采用的是左手坐标系。如果要把away3D转成右手坐标系,现在想到的需要修改的地方如下:

1 导入数据

由于3DMax是使用右手坐标系,由于还是右手系,所以对导入的数据不需要改变。
但是原先导入到away3D的顶点数据需要把右手坐标转成左手坐标。转换有如下小节。

旋转知识简单介绍


http://note.youdao.com/noteshare?id=8013634cfc6afe1ad575a6440bffd7de

对顶点的z轴取负

导入矩阵改变

未全部理解

大意是把矩阵从
[ a e i m b f j n c g k o d h l p ] → [ a e − i m b f − j n − c − g k − o d h − l p ] \begin{bmatrix} a & e & i & m\\ b & f & j & n\\ c & g & k & o\\ d & h & l & p \end{bmatrix} \to \begin{bmatrix} a & e & -i & m\\ b & f & -j & n\\ -c & -g & k & -o\\ d & h & -l & p \end{bmatrix} abcdefghijklmnopabcdefghijklmnop

个人理解:
对于SQT分别考虑

S尺度
假设不变化
Q旋转
假设是旋转 R x y z = R z R y R x = [ cos ⁡ γ − sin ⁡ γ 0 sin ⁡ γ cos ⁡ γ 0 0 0 1 ] [ cos ⁡ β 0 sin ⁡ β 0 1 0 − sin ⁡ β 0 cos ⁡ β ] [ 1 0 0 0 cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α ] = [ cos ⁡ β cos ⁡ γ sin ⁡ α sin ⁡ β cos ⁡ γ − cos ⁡ α sin ⁡ γ cos ⁡ α sin ⁡ β cos ⁡ γ + sin ⁡ α sin ⁡ γ cos ⁡ β sin ⁡ γ sin ⁡ α sin ⁡ β sin ⁡ γ + cos ⁡ α cos ⁡ γ cos ⁡ α sin ⁡ β sin ⁡ γ − sin ⁡ α cos ⁡ γ − sin ⁡ β sin ⁡ α cos ⁡ β cos ⁡ α cos ⁡ β ] R_{xyz}=R_zR_yR_x= \begin{bmatrix} \cos \gamma & -\sin \gamma & 0\\ \sin \gamma & \cos \gamma & 0\\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \cos \beta & 0 & \sin \beta\\ 0 & 1 & 0\\ -\sin \beta & 0 & \cos \beta \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ 0 & \cos \alpha & -\sin \alpha\\ 0 & \sin \alpha & \cos \alpha \end{bmatrix}= \begin{bmatrix} \cos \beta \cos \gamma & \sin \alpha \sin \beta \cos \gamma - \cos \alpha \sin \gamma & \cos \alpha\sin \beta \cos \gamma + \sin \alpha \sin \gamma\\ \cos \beta \sin \gamma & \sin \alpha \sin \beta \sin \gamma + \cos \alpha \cos \gamma & \cos \alpha\sin \beta \sin \gamma - \sin \alpha \cos \gamma\\ -\sin\beta & \sin \alpha\cos\beta & \cos \alpha\cos\beta \end{bmatrix} Rxyz=RzRyRx=cosγsinγ0sinγcosγ0001cosβ0sinβ010sinβ0cosβ1000cosαsinα0sinαcosα=cosβcosγcosβsinγsinβsinαsinβcosγcosαsinγsinαsinβsinγ+cosαcosγsinαcosβcosαsinβcosγ+sinαsinγcosαsinβsinγsinαcosγcosαcosβ

        +y
        |
        |
        |——————+x
      /
    /  
  /
+z
右手系坐标

        +y   / +z
        |	/
        |  /
        |——————+x
左手系坐标

对于右手系转左手系坐标,我们已经把顶点z轴取符来消除了镜像
右手系选择是沿着逆时针方向为正方向,但是左手系是顺时针方向为正方向,
所以
x轴的旋转 α \alpha α,在左手系中是 − α -\alpha α
y轴的旋转 β \beta β,在左手系中是 − β -\beta β
z轴的选择 γ \gamma γ,在左手系中是 − γ -\gamma γ
带入旋转公式得到
R x y z = R z R y R x = [ cos ⁡ − β cos ⁡ γ sin ⁡ − α sin ⁡ − β cos ⁡ γ − cos ⁡ − α sin ⁡ γ cos ⁡ − α sin ⁡ − β cos ⁡ γ + sin ⁡ − α sin ⁡ γ cos ⁡ − β sin ⁡ γ sin ⁡ − α sin ⁡ − β sin ⁡ γ + cos ⁡ − α cos ⁡ γ cos ⁡ − α sin ⁡ − β sin ⁡ γ − sin ⁡ − α cos ⁡ γ − sin ⁡ − β sin ⁡ − α cos ⁡ − β cos ⁡ − α cos ⁡ − β ] = R_{xyz}=R_zR_yR_x= \begin{bmatrix} \cos{-\beta} \cos \gamma & \sin{-\alpha} \sin{-\beta} \cos \gamma - \cos{-\alpha} \sin \gamma & \cos{-\alpha}\sin {-\beta} \cos \gamma + \sin{-\alpha} \sin \gamma\\ \cos{-\beta} \sin \gamma & \sin{-\alpha} \sin{-\beta} \sin \gamma + \cos{-\alpha} \cos \gamma & \cos{-\alpha}\sin{-\beta} \sin \gamma - \sin{-\alpha} \cos \gamma\\ -\sin{-\beta} & \sin{-\alpha}\cos{-\beta} & \cos {-\alpha}\cos{-\beta} \end{bmatrix}= Rxyz=RzRyRx=cosβcosγcosβsinγsinβsinαsinβcosγcosαsinγsinαsinβsinγ+cosαcosγsinαcosβcosαsinβcosγ+sinαsinγcosαsinβsinγsinαcosγcosαcosβ=
[ cos ⁡ β cos ⁡ γ sin ⁡ α sin ⁡ β cos ⁡ γ − cos ⁡ α sin ⁡ γ − ( cos ⁡ α sin ⁡ β cos ⁡ γ + sin ⁡ α sin ⁡ γ ) cos ⁡ β sin ⁡ γ sin ⁡ α sin ⁡ β sin ⁡ γ + cos ⁡ α cos ⁡ γ − ( cos ⁡ α sin ⁡ β sin ⁡ γ − sin ⁡ α cos ⁡ γ ) sin ⁡ β − sin ⁡ α cos ⁡ β cos ⁡ α cos ⁡ β ] \begin{bmatrix} \cos \beta \cos \gamma & \sin \alpha \sin \beta \cos \gamma - \cos \alpha \sin \gamma & -(\cos \alpha\sin \beta \cos \gamma + \sin \alpha \sin \gamma)\\ \cos \beta \sin \gamma & \sin \alpha \sin \beta \sin \gamma + \cos \alpha \cos \gamma & -(\cos \alpha\sin \beta \sin \gamma - \sin \alpha \cos \gamma)\\ \sin\beta & -\sin \alpha\cos\beta & \cos \alpha\cos\beta \end{bmatrix} cosβcosγcosβsinγsinβsinαsinβcosγcosαsinγsinαsinβsinγ+cosαcosγsinαcosβ(cosαsinβcosγ+sinαsinγ)(cosαsinβsinγsinαcosγ)cosαcosβ
所以c,g,i,j要取负号

T平移
原先x,y的平移不变
原先向z的平移,在左手坐标系中为-z即
[ T x T y T z ] → [ T x T y − T z ] \left[ \begin{array}{c} T_x\\ T_y\\ T_z \end{array} \right] \to \left[ \begin{array}{c} T_x\\ T_y\\ -T_z \end{array} \right] TxTyTzTxTyTz

最后的l变为-l暂时没有明白
默认看向的轴向???右手系默认-z轴,左手系默认+z轴???

投影矩阵变化

透视投影的推导:https://blog.youkuaiyun.com/a352614834/article/details/78307032
as3是归一化到[0~1]的

awaybuilder原先的投影矩阵

左手系投影矩阵,ndc的z是归一化到[0,1]
M p e r s p e c i t v e = [ d a 0 0 0 0 d 0 0 0 0 f f − n − n f f − n 0 0 1 0 ] M_{perspecitve}= \begin{bmatrix} \frac{d}{a} & 0 & 0 & 0\\ 0 & d & 0 & 0\\ 0 & 0 & \dfrac{f}{f-n} & \dfrac{-nf}{f-n} \\ 0 & 0 & 1 & 0 \end{bmatrix} Mperspecitve=ad0000d0000fnf100fnnf0

右手系投影矩阵

右手系投影矩阵,ndc的z是归一化到[0,1]
M p e r s p e c i t v e = [ d a 0 0 0 0 d 0 0 0 0 f n − f n f n − f 0 0 − 1 0 ] M_{perspecitve}= \begin{bmatrix} \frac{d}{a} & 0 & 0 & 0\\ 0 & d & 0 & 0\\ 0 & 0 & \dfrac{f}{n-f} & \dfrac{nf}{n-f} \\ 0 & 0 & -1 & 0 \end{bmatrix} Mperspecitve=ad0000d0000nff100nfnf0

AGAL代码

本来沿着-z的公式,全部要改成沿着z的公式

视锥平面

视锥平面根据文章来修改公式。

假设一个顶点 v = ( x , y , z , w = 1 ) \boldsymbol{v}=(x,y,z,w = 1) v=(x,y,z,w=1),转换到NDC坐标系的矩阵为 M = P p r o j e c t V v i e w W m o d e l T o W o r l d \textbf{M} = \mathbf{P_{project}V_{view}W_{modelToWorld}} M=PprojectVviewWmodelToWorld,所以一个点转换到ndc坐标系下为(未进行透视除法) v ′ \mathbf{v}' v
v h o m o g e n e o u s = M ⋅ v = [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 m 41 m 42 m 43 m 44 ] [ x y z w ] = [ x ′ y ′ z ′ w ′ ] = \mathbf{v_{homogeneous}} = \mathbf{M\cdot v} = \\ \begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14}\\ m_{21} & m_{22} & m_{23} & m_{24}\\ m_{31} & m_{32} & m_{33} & m_{34}\\ m_{41} & m_{42} & m_{43} & m_{44} \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ w \end{bmatrix}= \begin{bmatrix} x'\\ y'\\ z'\\ w' \end{bmatrix}= vhomogeneous=Mv=m11m21m31m41m12m22m32m42m13m23m33m43m14m24m34m44xyzw=xyzw=
[ r o w 1 ∙ v r o w 2 ∙ v r o w 3 ∙ v r o w 4 ∙ v ] \begin{bmatrix} row_1\bullet \mathbf{v}\\ row_2\bullet \mathbf{v}\\ row_3\bullet \mathbf{v}\\ row_4\bullet \mathbf{v} \end{bmatrix} row1vrow2vrow3vrow4v

经过这个变换后,点 v h o m o g e n e o u s v_{homogeneous} vhomogeneous已经在其次坐标系下。在as3中
− 1 ≤ x ′ w ′ ≤ 1 − 1 ≤ y ′ w ′ ≤ 1 0 ≤ z ′ w ′ ≤ 1 -1\le \frac{x'}{w'}\le 1 \\ -1\le \frac{y'}{w'}\le 1\\ 0\le \frac{z'}{w'}\le 1 1wx11wy10wz1

− w ′ ≤ x ′ ≤ w ′ − w ′ ≤ y ′ ≤ w ′ 0 ′ ≤ z ′ ≤ w ′ -w'\le x'\le w' \\ -w'\le y'\le w' \\ 0'\le z'\le w' \\ wxwwyw0zw
可得左平面以下公式
− w ′ ≤ x − r o w 4 ∙ v ≤ r o w 1 ∙ v ⇒ r o w 1 ∙ v + r o w 4 ∙ v ≥ 0 ⇒ ( r o w 1 + r o w 4 ) ∙ v ≥ 0 -w'\le x\\ -row_4\bullet \mathbf{v}\le row_1\bullet \mathbf{v} \Rightarrow \\ row_1\bullet \mathbf{v} + row_4\bullet \mathbf{v} \ge 0 \Rightarrow \\ (row_1+ row_4)\bullet \mathbf{v} \ge 0 wxrow4vrow1vrow1v+row4v0(row1+row4)v0

( m 11 + m 41 ) x + ( m 12 + m 42 ) y + ( m 13 + m 43 ) z + ( m 14 + m 44 ) w = 0 ( m 11 + m 41 ) x + ( m 12 + m 42 ) y + ( m 13 + m 43 ) z + ( m 14 + m 44 ) = 0 a x + b y + c z + d = 0 a = m 11 + m 41 , b = m 12 + m 42 , c = m 13 + m 43 , d = m 14 + m 44 (m_{11}+m_{41})x+(m_{12}+m_{42})y+(m_{13}+m_{43})z+(m_{14}+m_{44})w = 0\\ (m_{11}+m_{41})x+(m_{12}+m_{42})y+(m_{13}+m_{43})z+(m_{14}+m_{44}) = 0\\ ax+by+cz+d=0\\ a=m_{11}+m_{41},b=m_{12}+m_{42},c=m_{13}+m_{43},d=m_{14}+m_{44} (m11+m41)x+(m12+m42)y+(m13+m43)z+(m14+m44)w=0(m11+m41)x+(m12+m42)y+(m13+m43)z+(m14+m44)=0ax+by+cz+d=0a=m11+m41,b=m12+m42,c=m13+m43,d=m14+m44

同理右平面为:
x ′ ≤ w ′ r o w 1 ∙ v ≤ r o w 4 ∙ v ⇒ r o w 1 ∙ v − r o w 4 ∙ v ≤ 0 ⇒ ( r o w 1 − r o w 4 ) ∙ v ≤ 0 ( r o w 4 − r o w 1 ) ∙ v ≥ 0 a = m 41 − m 11 , b = m 42 − m 12 , c = m 43 − m 13 , d = m 44 + m 14 x'\le w' \\ row_1\bullet \mathbf{v} \le row_4\bullet \mathbf{v} \Rightarrow \\ row_1\bullet \mathbf{v} - row_4\bullet \mathbf{v} \le 0 \Rightarrow \\ (row_1 - row_4)\bullet \mathbf{v} \le 0 \\ (row_4 - row_1)\bullet \mathbf{v} \ge 0 \\ a=m_{41}-m_{11},b=m_{42}-m_{12},c=m_{43}-m_{13},d=m_{44}+m_{14} xwrow1vrow4vrow1vrow4v0(row1row4)v0(row4row1)v0a=m41m11,b=m42m12,c=m43m13,d=m44+m14

下平面为:
− w ′ ≤ y ′ − r o w 4 ∙ v ≤ r o w 2 ∙ v ⇒ r o w 2 ∙ v + r o w 4 ∙ v ≥ 0 ⇒ ( r o w 2 + r o w 4 ) ∙ v ≥ 0 a = m 21 + m 41 , b = m 22 + m 42 , c = m 23 + m 43 , d = m 24 + m 44 -w'\le y'\\ -row_4\bullet \mathbf{v}\le row_2\bullet \mathbf{v} \Rightarrow \\ row_2\bullet \mathbf{v} + row_4\bullet \mathbf{v} \ge 0 \Rightarrow \\ (row_2+ row_4)\bullet \mathbf{v} \ge 0\\ a=m_{21}+m_{41},b=m_{22}+m_{42},c=m_{23}+m_{43},d=m_{24}+m_{44} wyrow4vrow2vrow2v+row4v0(row2+row4)v0a=m21+m41,b=m22+m42,c=m23+m43,d=m24+m44

上平面为:
y ′ ≤ w ′ r o w 2 ∙ v ≤ r o w 4 ∙ v ⇒ r o w 2 ∙ v − r o w 4 ∙ v ≤ 0 ⇒ ( r o w 2 − r o w 4 ) ∙ v ≤ 0 ( r o w 4 − r o w 2 ) ∙ v ≥ 0 a = m 41 − m 21 , b = m 42 − m 22 , c = m 43 − m 23 , d = m 44 + m 24 y'\le w' \\ row_2\bullet \mathbf{v} \le row_4\bullet \mathbf{v} \Rightarrow \\ row_2\bullet \mathbf{v} - row_4\bullet \mathbf{v} \le 0 \Rightarrow \\ (row_2 - row_4)\bullet \mathbf{v} \le 0 \\ (row_4 - row_2)\bullet \mathbf{v} \ge 0 \\ a=m_{41}-m_{21},b=m_{42}-m_{22},c=m_{43}-m_{23},d=m_{44}+m_{24} ywrow2vrow4vrow2vrow4v0(row2row4)v0(row4row2)v0a=m41m21,b=m42m22,c=m43m23,d=m44+m24

近平面为:
0 ′ ≤ z ′ 0 ≤ r o w 3 ∙ v ⇒ r o w 3 ∙ v ≥ 0 ⇒ m 31 x + m 32 y + m 33 z + m 34 w ≥ 0 a = m 31 , b = m 32 , c = m 33 , d = m 34 0'\le z'\\ 0\le row_3\bullet \mathbf{v} \Rightarrow \\ row_3\bullet \mathbf{v} \ge 0 \Rightarrow \\ m_{31}x+m_{32}y+m_{33}z+m_{34}w \ge 0 \\ a=m_{31},b=m_{32},c=m_{33},d=m_{34} 0z0row3vrow3v0m31x+m32y+m33z+m34w0a=m31,b=m32,c=m33,d=m34

原平面为:
z ′ ≤ w ′ r o w 3 ∙ v ≤ r o w 4 ∙ v ⇒ r o w 3 ∙ v − r o w 4 ∙ v ≤ 0 ⇒ ( r o w 3 − r o w 4 ) ∙ v ≤ 0 ( r o w 4 − r o w 3 ) ∙ v ≥ 0 a = m 41 − m 31 , b = m 42 − m 32 , c = m 43 − m 33 , d = m 44 + m 34 z'\le w' \\ row_3\bullet \mathbf{v} \le row_4\bullet \mathbf{v} \Rightarrow \\ row_3\bullet \mathbf{v} - row_4\bullet \mathbf{v} \le 0 \Rightarrow \\ (row_3 - row_4)\bullet \mathbf{v} \le 0 \\ (row_4 - row_3)\bullet \mathbf{v} \ge 0 \\ a=m_{41}-m_{31},b=m_{42}-m_{32},c=m_{43}-m_{33},d=m_{44}+m_{34} zwrow3vrow4vrow3vrow4v0(row3row4)v0(row4row3)v0a=m41m31,b=m42m32,c=m43m33,d=m44+m34

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值