- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
8 f2 a% T' P9 }0 ~, r, i
( F; D6 i; J- L" H! W% E[Orientation – 方向入门) B4 G4 `/ E5 v& I* w: Z8 u
-----------------------------------------
) R' y- i" q) _' Z& ~" D, ]
* p/ N( P ]- t, T# R6 s1 q9 R9 }! i这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
' Q7 X6 g6 Z6 ^' [* h( N" G# B3 t画一个武器坐标图1 j) k) P. u3 c* U- L
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
/ t1 P! a1 [" I1 U& g在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。
9 f; G/ ^$ f0 w5 R% ]7 }: D* R7 o& R 4 @( g, C# A& ^. Q# D7 D, @5 a" _
例如:装在机身“上”方朝“前”的枪 3 t' [# E2 g% s' J, z9 m
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同* I! z/ E, u% N$ p# G
头3个数是1,0,0
' f- S- b# \* ~+ ]9 ~ 0 x7 c9 `, w7 n/ R
*机身Y轴与枪的Y轴指向相同
4 t1 ?8 e8 H' Z8 k中间三个数是0,1,0.! m3 t6 i' d: Q4 ` v! x8 m
*机身Z轴与枪的Z轴指向相同 d! O- }- R$ }& G# s0 @
后3个数是0,0,1. ) u; s6 ]9 H/ J+ e* n. n4 ~
根据上面的,枪的方向值如下:
1 W/ E2 W2 H2 N! ]; G1.000000
1 Z4 b/ Q' H$ B$ m2 y: p0.000000" ?: E" H5 w: R
0.000000
% \2 Q0 |: S0 h U" u' Y% X0.000000
+ d. `" B" q2 G' C6 Y1.000000
: y/ C2 ~2 N1 @1 {0.000000
* A1 q" ~- P0 M2 F0.000000
6 m, V+ [' a1 O$ F0.000000
' O) h1 H/ g% c( x n0 P4 R1.000000( K* s& H$ r3 U: b( E
上面的对应方向是指武器的坐标系和机身的坐标系完全对应
! }1 t/ }1 U# s) m) F3 m) g$ t \. o( a$ U0 |/ I0 Q# |! ~
例子2:枪装在机身“右”侧,朝向“前”& {" o8 \( {. ]& B
*机身X轴指向与枪Y轴指向相同
- ]+ r: }: t8 z. ] 头3个数是0,1,02 s0 N8 y9 }0 |" Y
*机身Y轴与枪的X轴指向完全相反
9 x. A& o8 N& `7 T1 {中间三个数是-1,0,0.
3 l$ e/ L2 } b1 t2 n4 }; V# v*机身Z轴与枪的Z轴指向相同
6 G1 X6 n( R( ^4 J+ w m G后3个数是0,0,1.; u' g' |- V( i; n! b
根据上面的,枪的方向值如下:
9 d% Z( f3 a2 B0.000000
- a* e( w! ?$ U1.000000
; j; d" ~! S- z( p8 X' c0.000000, B, i8 o4 |$ R# M$ B7 e9 p0 ~
-1.000000
4 c( j# G% B* W/ A A0.000000
% Z, u: n& G( X5 F L1 {+ X6 v/ Q* U0.000000
" ~* Z d: P3 M9 k0.000000
" f1 _8 F; w, c* B0.000000 G5 r0 {3 D( {4 V% ~0 u: M6 h
1.000000 ) s% L: P7 _8 K5 G
例子3:炮塔安装在“下”面,朝向“后”面
. J) O+ m# c9 N2 b0 z" G4 w*机身X轴指向与炮塔X轴指向相同
2 C9 n% S, j3 K; O/ U头3个数是1,0,0 $ [. h N9 m0 _- L% g% D
*机身Y轴与炮塔的Y轴指向完全相反
* |( m4 _" } w; x: Y0 V3 m中间三个数是0,-1,0.2 A( n' q2 P2 e Y
*机身Z轴与炮塔的Z轴指向完全相反0 p6 l W: f* w( l0 @ W
后3个数是0,0,-1.
( v% t% v- ^) \% a+ E总结如下,炮塔的方向值如下:
# d$ s# n3 [8 Q# P+ u Y8 @1.0000004 H% W" {* J, Q8 ]: m
0.000000
1 \6 A, c( o1 j. z' J k% F. A0 V1 s0.000000- a1 {/ ?% _; _' d
0.000000
$ g- N% i3 d9 Y$ o4 i1 o, R! ]3 X-1.000000
i/ q. G: a+ I5 J; B, U0.000000
4 L& S& k6 Y' G0.000000
9 X; V( A& k9 C3 x0.000000! y, p1 U% ^ A, ~
-1.000000
$ p/ ~* [. |# h$ m- M+ h- C m例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
" M1 `! U+ S0 M' k* B/ D*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
' A1 Y5 d P" L*机身Y轴指向在枪的坐标系y=-x的位置 1 A6 R; w8 L: k; Z/ |
中间三个数是-0.707107,0.707107,09 E8 B+ f1 d+ w: a( l
*机身Z轴与炮塔的Z轴指向相同 - ~+ e6 t w$ t, B7 |
后3个数是0,0,1.0 ~0 B: @$ V& [ v# ^9 S# K5 D
总结如下,炮塔的方向值如下:
8 E0 C2 _3 Z' v0 p. b0.7071072 i2 ^# @( N2 c9 E4 Y) R
0.707107. t0 P: e0 Y& f3 a
0.000000
# v! c6 }, ]1 P7 U$ h& |9 c-0.707107
9 _. Y) Z9 c/ X$ w- C9 A0.7071073 {8 v) E) y: T0 g& f% ?, C
0.000000
5 A( a3 f N& J, w1 j0.000000
0 t- h; x0 `% K/ s: S0.000000 d! t- T, L$ l. Z& L
1.000000
( f3 H8 {' x1 I8 \* t5 x& P9 Z/ N如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
) r' L# {; G' |2 X. p' P# c& z1 COrientation , N0 f8 E# H/ B* K
--------------------------------------------------------------------5 e ]8 G g+ m! D. Y
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
; T0 x/ o, d7 A$ L. |9 p7 [1 x在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。$ X, l- x+ M2 w2 G
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:' E5 J( E7 ?0 c, y4 R
# `. O Y& e3 T- f6 r1) 先对应方向,我想要武器绕X轴旋转多少弧度?/ ]; }8 t3 B& P$ _9 R9 S; [& E
2) 我想要武器绕Y轴旋转多少弧度?& c; j3 {4 [3 ^6 V
3) 我想要武器绕Z轴旋转多少弧度?# q2 F) ~/ e6 K* U, n, L
; B w8 E. k" H. W- i
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”: @+ M$ \* E* T$ Q7 Z& u+ H. @' Y( k
0 |7 [; R* u( o4 T5 N+ ?我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
, `" ?" Q; L4 b- k! E( D
4 c0 F4 f1 M' l* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
$ ], ?$ S# H* a* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。% O4 K+ N+ n- a5 O! m
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)5 W8 c3 O. e& M8 _! z8 T
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
/ H. M" G1 B9 x( H1 a- w3 _# a; A* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)1 ^& R% t- A. ?% Y* l( k+ s) S
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
+ M5 f T1 n2 S. z! s 按下列步骤得到你的取向矩阵:
$ `/ Z9 ~/ u+ ?, e8 h" b
4 z) P' ` t. S' E9 W1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.9 t1 Q6 e1 t0 a3 C+ p# u
2) 用{1, 0, 0}代替{u1; v1; w1}.
Z" R1 d. d+ s; u' ~" b* f: k, R3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
" \4 W/ ] B: y; k, [4) 用{0,1, 0}代替{u1; v1; w1}.; O# \- y2 v& Q9 P9 y
5) 再解方程式,得到取向矩阵中间的三个数6 M- m) L8 c2 r, ?& Q5 |9 n. h
4) 用{0,0,1}代替{u1; v1; w1}( ~" Y- b# S" o5 V. Y# S
5) 再解方程式,得到取向矩阵的最后三个数
) L% v2 m+ O- V! O6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.+ S0 S0 s& C# v3 c( z
n5 Z. D6 X1 s5 i+ c" T, h! Y如果你有一些计算数学的程序进行计算,那将更好一些。
8 J: l0 z1 r1 b8 \2 ~ G / c3 d3 g* T B
激活Hardpoint$ z6 |9 c9 X( G" G/ a( h: n
-------------------------------/ v# c6 R7 j5 {: U
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
( V- Z. D1 A L7 @但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
7 Z3 r, B' o! J如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。( U7 c+ g. q& [- E1 V3 l T. s
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
& K! e( ^9 ~" d9 @& ?8 x鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。 R {7 I, @2 x: r6 K0 l5 l+ [$ N
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 ; [5 ^ S, @8 b; _! k) v+ L/ u0 }
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
. ?. n% H) D2 |4 `- T6 |3 }6 V8 Y: Y! p参数如下& a$ W$ |$ q9 }
Position
! U) t2 w7 Q( X8 Y$ O0.000000
, i, [+ F- j: Z8 f" s4 A-1.1167366 N! p( z1 c# Y, B
-4.1632580 d) ]% Z# I: m; N5 w
Axis
5 |7 ?" r1 s0 U, \! q$ v0.000000( U- @: o0 H- a! }; _$ h* M0 s
1.000000- W' ]' G9 \& z& Z- V4 z, J" C! E
0.000000
0 l+ v; l* T) c/ b# K) rmax' i- B* s+ [( u r- u: {; l
6.283185! C- Q/ k9 l) ~5 z7 w- }$ J5 K2 ?
0.000000( H3 Z0 T+ X) H. Y1 ?/ s3 X: D8 i
Min5 P* D2 P. I$ h' S$ _8 ~, M
-6.283185
( ?7 c; O" q, {5 e) [; x& M0.000000) }: z/ P, j8 U1 I; l- y5 x
自由旋转 H* a& M, c; M& E! T2 U+ B3 Q
Orientation
7 E+ a; W' ?/ b- P8 R( t3 o2 \-1.0000004 y2 ?% e5 V* W+ T9 k
0.000000- b' p/ z, ^8 Y! M- V" i
0.000000, [+ ]; t6 ^0 o9 v' j7 ?
0.000000
: ?' ~! q" ~0 }( O-1.000000
0 S7 o) l. ^2 a2 Y3 G5 G4 a0.000000
& J+ W$ u, ?( u- y- E/ a0.000000
3 j& p7 J2 c0 v! O0.000000+ c0 k4 {1 g. d- I' ]% Y" @
1.000000
& b& h3 M" j. z/ }枪位于飞船下方,指向前方 |
|