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}
⎣⎢⎢⎡abcdefghijklmnop⎦⎥⎥⎤→⎣⎢⎢⎡ab−cdef−gh−i−jk−lmn−op⎦⎥⎥⎤
个人理解:
对于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γ0−sinγcosγ0001⎦⎤⎣⎡cosβ0−sinβ010sinβ0cosβ⎦⎤⎣⎡1000cosαsinα0−sinα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]
⎣⎡TxTyTz⎦⎤→⎣⎡TxTy−Tz⎦⎤
最后的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=⎣⎢⎢⎢⎡ad0000d0000f−nf100f−n−nf0⎦⎥⎥⎥⎤
右手系投影矩阵
右手系投影矩阵,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=⎣⎢⎢⎢⎡ad0000d0000n−ff−100n−fnf0⎦⎥⎥⎥⎤
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=M⋅v=⎣⎢⎢⎡m11m21m31m41m12m22m32m42m13m23m33m43m14m24m34m44⎦⎥⎥⎤⎣⎢⎢⎡xyzw⎦⎥⎥⎤=⎣⎢⎢⎡x′y′z′w′⎦⎥⎥⎤=
[
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}
⎣⎢⎢⎡row1∙vrow2∙vrow3∙vrow4∙v⎦⎥⎥⎤
经过这个变换后,点
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
−1≤w′x′≤1−1≤w′y′≤10≤w′z′≤1
即
−
w
′
≤
x
′
≤
w
′
−
w
′
≤
y
′
≤
w
′
0
′
≤
z
′
≤
w
′
-w'\le x'\le w' \\ -w'\le y'\le w' \\ 0'\le z'\le w' \\
−w′≤x′≤w′−w′≤y′≤w′0′≤z′≤w′
可得左平面以下公式
−
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
−w′≤x−row4∙v≤row1∙v⇒row1∙v+row4∙v≥0⇒(row1+row4)∙v≥0
即
(
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}
x′≤w′row1∙v≤row4∙v⇒row1∙v−row4∙v≤0⇒(row1−row4)∙v≤0(row4−row1)∙v≥0a=m41−m11,b=m42−m12,c=m43−m13,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}
−w′≤y′−row4∙v≤row2∙v⇒row2∙v+row4∙v≥0⇒(row2+row4)∙v≥0a=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}
y′≤w′row2∙v≤row4∙v⇒row2∙v−row4∙v≤0⇒(row2−row4)∙v≤0(row4−row2)∙v≥0a=m41−m21,b=m42−m22,c=m43−m23,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}
0′≤z′0≤row3∙v⇒row3∙v≥0⇒m31x+m32y+m33z+m34w≥0a=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}
z′≤w′row3∙v≤row4∙v⇒row3∙v−row4∙v≤0⇒(row3−row4)∙v≤0(row4−row3)∙v≥0a=m41−m31,b=m42−m32,c=m43−m33,d=m44+m34