- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
% U* A1 M/ Q! ^3 p( e6 C, ~6 I4 Y3 |' N# I$ t5 r* `- F
[Orientation – 方向入门
6 |4 f! N2 x! H, J5 `-----------------------------------------
{. Q3 z( ?! @2 ]
2 _6 H6 F/ ?; s+ |' M这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。8 e; R7 z/ v* o1 o0 @
画一个武器坐标图
5 G, ?- }) {" J) l2 |8 H+ s/ y9 cDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
, m2 J& I; n; E e* C4 h/ |3 z在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。, b8 e) L1 F0 ~+ l5 x. l' E
9 T- K- V) `2 a9 J I q5 A$ j# e1 s 例如:装在机身“上”方朝“前”的枪
% v) s; d* Y% Z; |8 B3 F*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同9 M1 }+ Z9 T. T8 K$ y% I
头3个数是1,0,0
2 e# k- W c2 i+ A2 c2 j. E ' c0 R [: G- M, u; I
*机身Y轴与枪的Y轴指向相同$ `, ]3 C2 P6 {+ X" z
中间三个数是0,1,0.
6 S) L" p4 ~( `) G% j*机身Z轴与枪的Z轴指向相同* X- m! p6 d. \" n" k1 I0 j& |* t
后3个数是0,0,1. ) p& s* N3 |, f# B8 |6 C4 e/ j e
根据上面的,枪的方向值如下:0 V8 f% q- h7 Z( U0 G% Z$ v* N3 U
1.000000
7 A- G/ P" `* P# z/ W1 d6 W0.000000
' |% W+ W7 f3 g) I/ f0.000000
8 n" q' N. N. r+ z7 K0.000000
2 G* Y1 w: c4 }, B1 ]1.000000! Z% A: a( x5 H, L, f* I
0.000000
- r$ B) T8 t) q& U' r( a0.000000$ V% ^: g' X( ~3 w5 c
0.000000
. e' ^+ {8 {6 A% d+ R* s) r1.000000
! i, O* b6 Y3 H3 m7 f" o上面的对应方向是指武器的坐标系和机身的坐标系完全对应
6 f9 d+ w. X7 `# q6 ?$ Q1 s" L" p& M9 R. X' b/ m
例子2:枪装在机身“右”侧,朝向“前”' c: ]7 @: c0 Z1 Y: |9 b
*机身X轴指向与枪Y轴指向相同
+ L$ B3 W U) s. y' \: A0 O 头3个数是0,1,0
' l& X7 S' X* U*机身Y轴与枪的X轴指向完全相反
. h+ C; Q! R# B% L$ v+ D中间三个数是-1,0,0. & h+ a) q9 r' n3 q S8 j3 ?2 H0 I
*机身Z轴与枪的Z轴指向相同
' Y, f6 O3 _/ V后3个数是0,0,1.
* p, l7 O+ n3 r/ v j6 w7 l根据上面的,枪的方向值如下:+ e* G4 t0 V. ~. B& ~
0.0000005 j8 o* a( o4 M& i& O' N4 h+ `
1.000000
7 c; y6 q5 M9 `- a5 R4 [' E; _0.000000* i& u8 x6 k- ~0 `
-1.000000* g8 g0 h( h3 x6 C# W: m1 u6 F
0.000000
0 Q& W u* \% D0.000000" b8 u6 w: [+ o" L* Z
0.000000* ?5 u9 |3 \! I; L
0.000000
" Y% _/ ~! i, y G2 ^1.000000 : Y# N& ]/ u( s( v
例子3:炮塔安装在“下”面,朝向“后”面 " x( ^" l3 Y p+ g' R- T3 A
*机身X轴指向与炮塔X轴指向相同
/ ^: O0 Y5 p) X! w8 g7 _4 |1 h头3个数是1,0,0
5 S4 S* Q2 {7 W! M. B, y$ T*机身Y轴与炮塔的Y轴指向完全相反
% ^* \7 m8 r/ B, r9 n中间三个数是0,-1,0.
2 A3 b- P' X% t; G8 |5 @*机身Z轴与炮塔的Z轴指向完全相反
( H* c' f, x5 h" V后3个数是0,0,-1.
% J9 q ]- D( f0 q4 c) T9 B总结如下,炮塔的方向值如下:
4 M8 ?/ h- G9 r% v- T4 F M. \" t1.000000
$ {0 N: [6 S d! ]0 X0.000000, u/ r6 d+ v$ c( Q* n" i
0.000000/ k4 k! Y# @" L' s
0.000000/ J6 F; E, }3 y0 j
-1.000000
. F7 j0 W6 P! B( b. L+ a$ q0.000000
: ? b1 _; E( Y0.000000$ q6 }5 t% q& G' a# w
0.000000: y. |* i( p0 H; H! w' W
-1.000000
6 z3 }3 |. ~, A8 N% T1 F例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
: |6 l/ W# i3 A/ u*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
; g' m& n& M# L*机身Y轴指向在枪的坐标系y=-x的位置
5 h) C3 M& C$ }- F中间三个数是-0.707107,0.707107,0
5 I7 _) H& a0 `& G' m) A*机身Z轴与炮塔的Z轴指向相同
$ W+ m2 f! `' u$ T2 D4 j. P, ]后3个数是0,0,1.
* C7 l6 f/ I% n! g5 m* d& ^总结如下,炮塔的方向值如下:/ S" W9 Z- ~, u' R
0.707107 m+ j1 {: ?( a7 G
0.707107
8 i0 B7 R( B( m7 ?1 F0.000000; q5 y' i& J( x. W
-0.707107
L1 Q& k; P9 C3 I+ R; @0.707107
^) a! d, t# ?6 e& m0.000000' K4 V. i' }6 ?9 [5 i
0.000000
, w O. g3 q% o- e0.000000$ F0 n4 \8 ], y$ G
1.000000# S: P: e* c ~, h$ V$ ^& a& o
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。9 l' v2 w/ \. W ?
Orientation 0 I3 ?: T$ |# F2 [! b" V2 i" X- R
--------------------------------------------------------------------, a4 C6 p- s8 s; H: {) l0 Y
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
7 M- N# m% c" K+ s在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。3 H. `, u* D& G) z1 i$ x! K! m& j5 @
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
6 ~+ q6 x0 m6 z5 i5 g$ ]& W
, b( `8 S8 n9 Z4 Z: }1 b1) 先对应方向,我想要武器绕X轴旋转多少弧度?
- T# \. n. K; B" z0 z! L- \2) 我想要武器绕Y轴旋转多少弧度?
: T1 r; ]9 Y) C% S6 P/ n* S$ `3) 我想要武器绕Z轴旋转多少弧度?
" r l8 K% b: L8 M8 a
, D# A# ] o: l- i8 w("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”7 ?" f. b% u, ]# K1 `, {0 Y
- J( R& z, |& T! U2 Y0 t7 h我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
4 K' z4 W+ q# u: ]7 t6 M9 g; V4 y/ D 1 l8 B' ^) v; V' B
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
, f8 l' c/ f- s- R- p# f% Q' N* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。% Z5 l7 `* \6 B9 F2 k5 w
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜): }' @& j/ p/ Z* q# R2 [
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
0 N [* a3 L4 K8 q7 R8 c2 z9 X# F* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
+ C% t* \; o, f [( ?根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。, {: [% m, q. Z& ]; B; I
按下列步骤得到你的取向矩阵:& v# j# L# @- I8 r, `7 k2 Q0 P$ L
3 }0 J v/ D' x2 c0 o5 \/ z
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
" k5 G3 F7 c7 w4 X6 \2) 用{1, 0, 0}代替{u1; v1; w1}.
$ Y0 C! k9 R0 k, d; o( t3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
9 Q) h& ^( U$ b, `: g4) 用{0,1, 0}代替{u1; v1; w1}.9 t3 M: T2 t2 M
5) 再解方程式,得到取向矩阵中间的三个数
* ^( j+ ~) ~- s, V- _! M! f4) 用{0,0,1}代替{u1; v1; w1}7 @4 U g% s/ [& s D' t( Q6 O) e
5) 再解方程式,得到取向矩阵的最后三个数
; `5 J# e7 }2 E) V9 J- H; O6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
2 a+ h G# x1 v$ q3 r 0 I4 K5 _/ Y2 c# b/ v* m* ~
如果你有一些计算数学的程序进行计算,那将更好一些。
$ N1 C- }6 h. F F, n- l6 S
& c# D+ i& T3 e) W8 a激活Hardpoint. f; W* p7 f( T" h
-------------------------------
7 ?9 I0 {9 n. v* a上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。2 T6 n& U8 y1 _$ `* b* @6 W
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。% W C* a/ |5 Q4 f( B
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。- z; z( C0 _* E- p. t V! ?
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
+ F7 v% p4 c0 a7 W鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
' E5 Q/ S0 v2 k: f7 m: W' ?9 \8 E; c记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
X" b) ]0 y% z. H后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。* j( ?7 O H0 q& @9 ~" f0 W
参数如下
" ]" k* X4 J% BPosition$ E8 T4 P/ t R8 u
0.0000007 W4 m% {$ F5 Y8 c
-1.116736
$ H) D1 Y/ O3 T0 M {2 m) p! K$ V-4.163258. z. z& z( f V3 c% \; W
Axis6 Y2 C6 N8 C0 z3 ]
0.000000$ s+ d0 l) f# R1 ]4 M
1.000000* K+ G! r- C& L
0.000000
; m& G, I6 A* \# `+ q3 P: ?max+ @3 |( C! y, B$ J
6.283185
0 }0 a' x/ ^9 J. c( H0.000000
5 B) }: O' @2 k5 vMin) b/ d4 A0 h* n# {9 {/ S
-6.283185
( P$ R% h3 U- N2 l0.000000% z& X) R8 w3 ? D: s4 q" p' r8 y
自由旋转6 V+ i, X, r) G2 X+ h
Orientation7 U' A8 r( S5 h
-1.000000
. m4 ?. l1 A3 ^4 M) |8 c0.000000
$ @6 A8 J L- ?, B* _0 @0.000000
8 r0 r5 d+ n0 p+ H) y7 C) [) {0.000000- I' y/ G0 v$ S3 y) B
-1.0000004 O' v5 ~9 Y* k" r: ~& i6 w( v
0.0000007 M v; M/ _* N M2 _0 f- {9 ^; H
0.000000
( s( u: R4 r A" i0.000000* `9 u; @# c+ E H+ o
1.000000' v( x& U8 R- t: M) N( N
枪位于飞船下方,指向前方 |
|