- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 ; z5 a: A) {, [) t6 z
0 Q2 T* ~0 h5 e! Z5 S- `, ^
[Orientation – 方向入门7 z2 X k q; E; X
-----------------------------------------: j' {( J v2 |
* j7 S* I! W5 I4 X) v F$ b
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。1 k& z. z5 A: B' i; z1 Y P/ d* q6 V
画一个武器坐标图! ]( e7 l- ~4 w! E* b
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.( g$ R; m0 m2 B' m
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。7 p+ Y A5 b) i# i* o! v0 f4 @6 t
" p2 P7 o, O' U$ b1 C0 |1 O 例如:装在机身“上”方朝“前”的枪
6 |3 X" `- Q5 N7 d) m*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同. @7 [3 L* J. }+ A. l' p2 r4 _; W
头3个数是1,0,0) o" o" |! X* w/ Q, Y: N; X
" d( j$ D- U# H ~. y3 l*机身Y轴与枪的Y轴指向相同
% v, E# C; t" |+ D' j$ W中间三个数是0,1,0.
2 M, Y, \) S0 \8 T' G) `: m% ?3 j! \*机身Z轴与枪的Z轴指向相同
' m+ `( h2 z/ W+ k2 w2 o- v& L! b后3个数是0,0,1.
5 G% K( L" a J% u. ^4 F" I* G' X7 c$ |根据上面的,枪的方向值如下:
+ g6 a) d1 g4 W1.000000$ H9 [- J( u; P9 W7 B
0.000000
9 n; I! x6 {( K0.000000& ]0 W e+ J5 ?3 b+ H# [: N) j
0.000000
9 I1 \, k0 G$ P( q1.000000, p5 u' @7 T: N3 J# I
0.000000
. j( ^, i( @4 P! T0.0000004 F B+ m* u L/ J1 P& l- x
0.000000* ?, F- I' a) Z2 T- D
1.000000
; r; n4 A0 b. B9 E$ `5 } f T, }上面的对应方向是指武器的坐标系和机身的坐标系完全对应
$ Z6 a* b: m* ^8 W
' [7 l2 G; V* _例子2:枪装在机身“右”侧,朝向“前”- G' \: F: G& Y1 _
*机身X轴指向与枪Y轴指向相同& S# g! @) u+ R$ \* R: ~
头3个数是0,1,0
) I( F5 k0 y& l* _( {; r& u*机身Y轴与枪的X轴指向完全相反+ A& g1 Y9 g4 n) D
中间三个数是-1,0,0. 8 \( r. c3 f; C3 Q" F
*机身Z轴与枪的Z轴指向相同! `; C3 z5 z/ S
后3个数是0,0,1.
5 ?) |! @, A8 `1 `- A: E$ S7 D根据上面的,枪的方向值如下:
# [6 J& l. W' @- [6 h$ ^8 H; ~+ H0.000000
& N( ?; l5 o$ C/ Z1.000000& m: [! e" H* o, y3 V+ k4 t" r
0.000000
6 e9 X" h( F; u3 W5 ~8 D( H-1.000000% }5 Z+ ^! r# f" H
0.000000
7 \9 z! F: u( v5 f; P0 D9 |0.000000
1 n+ O6 ~, U3 B$ k2 ~5 g0.000000
! V; e3 ~2 A$ b0 @# l3 ?; c0.000000
1 S. _! E2 [# V! A' H$ I1.000000 * w$ _9 q& ^( R* n: E
例子3:炮塔安装在“下”面,朝向“后”面
B. C7 Z& _7 ]$ U( ?) a) w4 j*机身X轴指向与炮塔X轴指向相同 ! C3 O+ ?; D' i. Y+ A/ O; Q
头3个数是1,0,0
7 i% {4 ?' S% p5 J*机身Y轴与炮塔的Y轴指向完全相反
& D7 V7 B) \+ ^- g9 d: B7 r* v0 n中间三个数是0,-1,0., @& l8 l ?3 \
*机身Z轴与炮塔的Z轴指向完全相反6 ]. V: M) f2 h' x, v1 ~' a! e4 ~
后3个数是0,0,-1.6 [0 d1 h y5 R, f
总结如下,炮塔的方向值如下:
i" s- k! \2 g% p% t- J1.000000
2 K6 F. m4 P/ }# ?3 v0 i0.000000. a C0 q! o) N( ]/ W
0.0000004 P2 P3 K/ |, J1 }
0.000000
. J9 l8 v5 S2 Y) ~# J! h-1.000000- N/ w8 z& ?# {3 L* j9 a1 W
0.000000
" J; G/ L# c$ l: J0 M. n0.000000
& Q# R* B2 e0 Y i0.000000' c7 ^3 A7 [+ X, o
-1.000000) d3 @! N2 q" M" V
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1); R# t2 u0 h& P* c" _
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)4 q4 z, T, }3 v& ^$ c( r
*机身Y轴指向在枪的坐标系y=-x的位置
0 s" r9 l$ ~: }* G+ m中间三个数是-0.707107,0.707107,0% n& o2 _. G1 V% i4 C
*机身Z轴与炮塔的Z轴指向相同 , c T# E O/ d M, |% C4 O3 _
后3个数是0,0,1.4 i* f4 H. i q" Y+ c h+ F
总结如下,炮塔的方向值如下:1 o8 o& Y+ U6 y0 @1 ~! D
0.707107
7 k9 l8 H2 }# Y, ^" {0.7071073 h7 O v' b& J. r# }
0.000000 }( ?+ X9 ~2 ]2 V2 |8 b$ S( b
-0.707107$ P/ e0 W" C/ B5 x. t
0.7071072 G7 j& f7 X, ]) R/ n; R$ K
0.000000/ f6 g. D' G! Q( ]
0.000000
$ ^! K; K2 L4 U, [- N1 g0.000000
1 X6 j. `4 H3 c% O" A- s8 l1.000000
2 o ]$ v' }6 J3 k4 Q如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。3 L, q" h& o" ^: f( c" r. H
Orientation # d" i# @6 b3 ?# ]5 O6 e
--------------------------------------------------------------------# o+ O* d4 m* y; J; g$ V ?) X3 N# E
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
/ z) g* ^7 K' ^5 _( g: E( s在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。- t- R: W4 v9 q9 Z. X
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
5 V& Y$ B l# Q" y+ A 4 a2 m7 ]( f" f+ j3 A
1) 先对应方向,我想要武器绕X轴旋转多少弧度?6 W4 H4 C, y* e' [, @
2) 我想要武器绕Y轴旋转多少弧度?
/ b4 M+ D! X1 Y8 `( s1 E; `3) 我想要武器绕Z轴旋转多少弧度?
. v1 r" J) a! N1 s) M: W
1 }8 {, y, F1 g( T" v9 Q* X("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”: L% o& E: j/ ^. n0 Y/ o' o
3 d- `% r+ D6 I1 Z我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:) a' D$ D9 Y2 N2 R- a
1 g% w& T& H: U( Y7 W& y+ J* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
1 R2 v+ Y# z4 X: E8 [* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。5 D& ~5 b3 Q t$ A. [
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)
5 I/ h' E# D: U+ l" N' L; G* Theta W表示你想要绕Y轴旋转多少(例如,左右转)- V5 A/ P1 x( O7 P
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)5 Q+ c( q' S2 Z7 q" }) i
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
+ y S2 T0 X$ {) ^, R; C 按下列步骤得到你的取向矩阵:
3 Q3 O. N) B, _
2 I9 i' p0 i8 {& \. f: S1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
% M* m& \$ B. T4 N2) 用{1, 0, 0}代替{u1; v1; w1}.
; P3 c0 P) U+ f% X, T7 i3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数7 a" _0 S( ]9 s6 I8 ^
4) 用{0,1, 0}代替{u1; v1; w1}.& O c5 D; r8 [! j' e1 x. j3 V
5) 再解方程式,得到取向矩阵中间的三个数
& h0 \; ^; z, q5 c$ v1 } n4) 用{0,0,1}代替{u1; v1; w1}
$ ~3 K* s: Q! B5) 再解方程式,得到取向矩阵的最后三个数
4 Y2 w% h5 |: L6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.' K' O. y; `' A( d" u) m6 P K
+ |" \7 \4 a% T% g1 v如果你有一些计算数学的程序进行计算,那将更好一些。' }! E- @6 ]! P+ l+ a
4 o8 S" Y8 [0 |% L* ~' U激活Hardpoint& }; ]( }; m1 T+ S
-------------------------------
' F3 U! N% p: e$ d$ `上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。* T6 T0 ^* }& z% v
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
- M) b0 @3 |! _6 V- [( b/ S# O/ b如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。8 A8 n* h% u. P2 o0 \& o: J
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
' B+ r7 M- W' t+ \+ s( M. Y鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
% t# R5 n5 v: o: Z& U记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 4 J5 U3 Q" n# h* y. x* A
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
i2 ]+ l) y8 s参数如下
5 }6 \4 Z* Y- K5 W, g) GPosition5 E7 k1 u; N2 s9 S5 V0 Z
0.000000
: G2 o1 ]9 m5 u+ F4 K-1.1167368 \0 A! O- a, Z7 M
-4.163258* N6 D( }: ~# M
Axis$ r/ R! z8 Z: a
0.000000! f1 Q( A" c: }, v
1.000000
p3 P5 H9 L4 T6 _6 I0.000000
5 O. V8 j- J3 z2 h2 Emax) x; {$ W! G8 |. g- z/ ~3 h3 d! b
6.2831850 W7 Q' l- g" q- z1 `, h( X
0.000000
/ o2 S/ R+ I! ]- {$ P) xMin
( `* S: J" Z T/ x* c3 C-6.2831850 W& W- n8 q2 w# Z; @6 e4 P& |5 }7 W; _
0.000000
# x3 Q) s) r, E. C4 N4 F3 P8 @3 F% b自由旋转9 }2 y8 P' F. L0 a6 J
Orientation0 _ a& F% h9 T: N% @) \
-1.000000
5 n9 X5 a3 n" r- k0.000000) ?; Z/ _" C# k1 I, w: V, N1 X& D
0.0000009 x' E/ X2 j5 J1 Y8 |; W y
0.000000 M" V! ^( O! O$ E
-1.000000
1 `8 q/ m6 o* Z R( z2 \0 |0.0000000 t, U; C0 _/ Z2 {; B$ T
0.000000
7 x3 h$ b9 W/ X& B0.000000
, t- T7 v9 G, R: U1 E' U1.0000001 L6 X& g) o% T
枪位于飞船下方,指向前方 |
|