Overview
一个法线向量有三个坐标值 ,这个值是相对于哪个坐标系下的呢?我们可以选择3D
模型的顶点所在的坐标系,即对象空间(Object-Space
),也可以选择3D
模型纹理所在的坐标系,即切线空间(Tangent-Space
),也称为纹理空间(Texture-Space
)。
将一个点从UV
空间映射到三维空间E
,其中TB
作为基矢,以UV
空间中的U
和V
的增长作为控制参数。
假设三角形中存在一点P
,则向量AP=U(p)*T+V(p)*B
,只要知道P
点的UV
坐标值,即可得到P
点的三维坐标值。
公式推导
{
E
1
=
Δ
U
1
T
+
Δ
V
1
B
E
2
=
Δ
U
2
T
+
Δ
V
2
B
\left \{\begin{matrix} E_{1}=\Delta U_{1}T+\Delta V_{1}B \\ \\ E_{2}=\Delta U_{2}T+\Delta V_{2}B \end{matrix} \right.
⎩⎨⎧E1=ΔU1T+ΔV1BE2=ΔU2T+ΔV2B
变换:
{
Δ
U
2
E
1
=
Δ
U
1
Δ
U
2
T
+
Δ
U
2
Δ
V
1
B
Δ
U
1
E
2
=
Δ
U
1
Δ
U
2
T
+
Δ
U
1
Δ
V
2
B
\left \{\begin{matrix} \Delta U_{2}E_{1}=\Delta U_{1}\Delta U_{2}T+\Delta U_{2}\Delta V_{1}B \\ \\\Delta U_{1}E_{2}=\Delta U_{1}\Delta U_{2}T+\Delta U_{1}\Delta V_{2}B \end{matrix} \right.
⎩⎨⎧ΔU2E1=ΔU1ΔU2T+ΔU2ΔV1BΔU1E2=ΔU1ΔU2T+ΔU1ΔV2B
{
Δ
V
2
E
1
=
Δ
U
1
Δ
V
2
T
+
Δ
V
1
Δ
V
2
B
Δ
V
1
E
2
=
Δ
U
2
Δ
V
1
T
+
Δ
V
1
Δ
V
2
B
\left \{\begin{matrix} \Delta V_{2}E_{1}=\Delta U_{1}\Delta V_{2}T+\Delta V_{1}\Delta V_{2}B \\ \\\Delta V_{1}E_{2}=\Delta U_{2}\Delta V_{1}T+\Delta V_{1}\Delta V_{2}B \end{matrix} \right.
⎩⎨⎧ΔV2E1=ΔU1ΔV2T+ΔV1ΔV2BΔV1E2=ΔU2ΔV1T+ΔV1ΔV2B
得:
{
T
=
−
Δ
U
2
E
1
+
Δ
U
1
E
2
Δ
U
2
V
1
−
Δ
U
1
V
2
B
=
Δ
U
2
E
1
−
Δ
U
1
E
2
Δ
U
2
V
1
−
Δ
U
1
V
2
\left \{\begin{matrix} T=\frac{-\Delta U_{2}E_{1}+\Delta U_{1}E_{2}}{\Delta U_{2}V_{1}-\Delta U_{1}V_{2}} \\ \\ B=\frac{\Delta U_{2}E_{1}-\Delta U_{1}E_{2}}{\Delta U_{2}V_{1}-\Delta U_{1}V_{2}} \end{matrix} \right.
⎩⎨⎧T=ΔU2V1−ΔU1V2−ΔU2E1+ΔU1E2B=ΔU2V1−ΔU1V2ΔU2E1−ΔU1E2
N
顶点法线向量,经施密特正交化:
{
N
⊥
=
N
o
r
m
a
l
i
z
e
(
N
)
T
⊥
=
N
o
r
m
a
l
i
z
e
(
T
−
(
T
⋅
N
⊥
)
⋅
N
⊥
)
B
⊥
=
N
o
r
m
a
l
i
z
e
(
B
−
(
B
⋅
N
⊥
)
⋅
N
⊥
−
(
B
⋅
T
⊥
)
⋅
T
⊥
)
\left \{\begin{matrix} N_{\perp }= Normalize(N) \\ T_{\perp }= Normalize(T-(T\cdot N_{\perp })\cdot N_{\perp }) \\ B_{\perp }= Normalize(B-(B\cdot N_{\perp })\cdot N_{\perp }-(B\cdot T_{\perp })\cdot T_{\perp }) \end{matrix} \right.
⎩⎨⎧N⊥=Normalize(N)T⊥=Normalize(T−(T⋅N⊥)⋅N⊥)B⊥=Normalize(B−(B⋅N⊥)⋅N⊥−(B⋅T⊥)⋅T⊥)