- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 h; ?, A6 l# x4 a1 d4 \* r- h9 w
# g+ d' x9 F3 x$ h3 B[Orientation – 方向入门2 X- o& J: [* l4 p# z7 M2 c
-----------------------------------------; l! K' M% t \( y* q" ^
+ Q; {0 x) y8 l3 F' w6 E. c
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
2 m5 A& M% v, j# I0 H$ _& K: a% |+ g: r画一个武器坐标图& z! ]$ P1 K) a D
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
- o, t4 y8 K3 c9 |0 L% E$ B H: U在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。
# J5 W! S) l D, \4 E5 V) a
$ x$ r) ` h) E( I4 C 例如:装在机身“上”方朝“前”的枪 ) {7 E- G" s( W0 t2 V4 n4 q) I
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同6 s7 o8 I g- P# D* z& y, F0 E; D
头3个数是1,0,0
o9 y* M q' s5 }& O- R 2 a7 J! F0 l2 f6 p' }$ i/ t
*机身Y轴与枪的Y轴指向相同+ Y0 W4 B% e- |7 U& C O$ W
中间三个数是0,1,0.) N& R0 `3 D O% i$ Z
*机身Z轴与枪的Z轴指向相同
1 J9 s; Z. p+ `& x% b: ^4 f, j后3个数是0,0,1.
& c7 K, H' \" K$ ~2 k根据上面的,枪的方向值如下:
% m( \* H: b7 ~% O: c- t1.000000/ E8 j7 V* `% Q& z
0.0000001 m7 O) i3 _* v" S0 l
0.0000006 L. t" p( Y: T. H- ^( T6 K
0.000000
& }. D. G" I# ]5 }; p7 S6 z9 i1.000000+ H2 }, Y: l4 E' b$ T7 c
0.000000& ~, Q# J# \ b; j' _8 H$ }
0.000000
5 l" C) C) {: F) K) z8 q0.000000+ Z" g2 D! s! G# ?1 G% m
1.000000# r7 _/ ?2 j/ z- u; N& u! s) K! s* `
上面的对应方向是指武器的坐标系和机身的坐标系完全对应& x* V6 q4 E$ S* A1 {* f; W
0 o3 P4 F5 C+ b# x例子2:枪装在机身“右”侧,朝向“前”# V2 a- e- B0 u3 I! w
*机身X轴指向与枪Y轴指向相同' a y9 A& i: Y- F
头3个数是0,1,0
' k. B) w5 n+ f2 i3 I& a) `*机身Y轴与枪的X轴指向完全相反! R/ o. l/ i# g* S7 R) i# l) g
中间三个数是-1,0,0.
/ w+ a2 t* X, F+ _" J*机身Z轴与枪的Z轴指向相同
; n* Y* j4 m' \: K1 r+ d后3个数是0,0,1.
& l) @! d( l8 A; o, ^3 I根据上面的,枪的方向值如下:* @& ~) t5 E/ s
0.000000
& x7 u' t" {1 i1.000000
6 \' g2 v$ I& D0.000000
" d# e: k& D; a' V( E [7 d: z5 }-1.000000
: g9 p+ B7 x" w" i2 Z8 f8 Y0.000000
; Z4 ^7 h g% D0.000000
* q" T* f# X6 ]( M2 P6 o0.000000
3 f" r2 Y# g6 c0.000000& W% ?: i9 L( F. \! X. Q' t
1.000000
: n1 t- r( W6 e# \例子3:炮塔安装在“下”面,朝向“后”面 # h. J4 J) _ i* m4 |% E- J6 N8 V
*机身X轴指向与炮塔X轴指向相同
( M' y* _; p7 `( W. `8 g头3个数是1,0,0
' B/ B+ E: O8 N' R4 l3 V( Q*机身Y轴与炮塔的Y轴指向完全相反 ! C, V" J2 @. E% Z3 C3 d% S$ ~9 }
中间三个数是0,-1,0.- B6 x/ j6 P/ f* j- [+ y, C
*机身Z轴与炮塔的Z轴指向完全相反
4 N- n# c# Y4 F6 N4 c后3个数是0,0,-1.( ?, X: ?" U3 [; |
总结如下,炮塔的方向值如下:
' k: W# r2 z U8 l, s9 P& B' |1.000000! F* Y" x7 R4 U4 H! E
0.000000
9 o: T9 T/ W- q8 R0.000000
4 x0 c- @/ t; R; P9 `3 Q- l0.000000
: S" c5 U/ q' G+ g2 L-1.000000' z+ j/ w. A6 x/ T! U; u8 W
0.000000
1 V" N U9 a8 S+ C! r0.000000
( A! b2 }$ z, h' ~# F! g0.0000000 m0 t2 e* ~6 Y# V3 w
-1.0000008 F5 ^4 k/ F7 g4 \8 T
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
) _2 i# O. q% O# T" O*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示). i1 ?5 i3 } L% o% h+ H+ ~: o
*机身Y轴指向在枪的坐标系y=-x的位置
_9 k% W8 L+ }* ^中间三个数是-0.707107,0.707107,0
4 S2 A6 f4 N: S- G% j1 m; c8 G3 C6 \*机身Z轴与炮塔的Z轴指向相同 ' z, l" G# E$ h6 p# r$ e
后3个数是0,0,1.$ [8 [& ^1 J" |. V6 j8 {+ o. g
总结如下,炮塔的方向值如下:
4 L# S. K- P3 P0.707107
2 _+ b) L* j9 q9 w" v0.707107
- |. v E/ f/ b4 t# z" l0.000000
T- E. l% z6 @+ I-0.7071075 D8 Q5 k( T4 P
0.7071072 X+ @5 \$ p$ J$ u
0.0000009 X3 b" V/ h4 F3 t4 t% b
0.000000
! V. `) z4 c, o) E0.000000/ O1 [. n) G: o7 g9 A
1.000000
/ g+ U/ U% T0 A. X( W如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。 _! y+ N' H, H
Orientation ! ^8 W/ |- M$ g" a. U2 s" R
--------------------------------------------------------------------: @8 e! |: U1 G" ^- ?
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
& ]9 @9 \9 m5 v* f在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。0 g. H- V/ G+ V9 H/ H
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:3 A& D3 k( {0 E0 }0 ~5 @$ X4 m2 S
: b. K" a' V: G# e3 j
1) 先对应方向,我想要武器绕X轴旋转多少弧度?
& ]0 q! J1 \5 l3 c p& d4 a2) 我想要武器绕Y轴旋转多少弧度?
: C8 Y$ ~+ A9 F3) 我想要武器绕Z轴旋转多少弧度?- o U) J5 ^- K6 H- Y7 P: P1 K
U4 Y' y5 @; F
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”- `" D t) C/ _) |5 L
4 M1 p! d: s C1 i! g我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:7 L1 x3 h) T( w. p% c
) Q: ?$ [% z2 l6 f1 Z G* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)0 ], z3 K6 m. M/ e0 s* h0 B5 d1 q
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。7 N/ |; u2 Q" R5 L5 i5 R
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)
+ _$ D" `; V: K* a4 ^# Z v8 \* Theta W表示你想要绕Y轴旋转多少(例如,左右转)6 \/ ?+ W* |* Q R) }
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
! s Z; L+ |7 Z; ?( z根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。' ^9 i* R) O6 K4 a4 L
按下列步骤得到你的取向矩阵:
9 `( U& i; c/ S ' l& U6 }, S( ?5 ]2 s
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.4 D w! C# _5 z; G/ X( U& s
2) 用{1, 0, 0}代替{u1; v1; w1}./ x0 m' z7 W6 a# c9 p& M
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
E8 `+ u* c" J- b2 L. a% r+ V4) 用{0,1, 0}代替{u1; v1; w1}./ H( _ ~- E7 h g- l
5) 再解方程式,得到取向矩阵中间的三个数
7 ~2 ~# E2 S3 p9 J4) 用{0,0,1}代替{u1; v1; w1}
, N: A. I7 L. G5) 再解方程式,得到取向矩阵的最后三个数7 e% Y1 [3 j& _" \& v% Z
6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
/ |) h& o) r- Y& N0 U9 M% u' z
% Q' y M; \( x5 J' D5 j如果你有一些计算数学的程序进行计算,那将更好一些。
, a! z6 r. h3 d4 h
. }9 Z) G8 b' d4 v! y激活Hardpoint' Z& x0 }7 h+ y5 M+ s5 C; Q4 f
-------------------------------
' \& }' d! j, u1 D! Y8 E3 Y上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
0 ?2 q6 H# C1 @- j1 d8 x4 e; F但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。0 N5 K2 @+ [0 h& @" w0 Q9 {1 F
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。
2 Q% e" l5 y" e. F1 P8 q, k& I注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
4 g" i. X( s& `& [, @+ l鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。% q3 B0 c: T: a8 B7 Y
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
& i9 A6 I A; K$ `) P# q% ?) d: K+ Y后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
/ a) G% u3 P2 Y1 a3 p4 ]参数如下7 g8 J* U: Z; x$ W+ ]+ u
Position
7 @' m2 Q8 J s0.000000
" E# s, ^( m) s1 v-1.116736
8 `! \% y. A% ~# I9 }$ B) p) D-4.163258% L6 T( S2 q6 ?# a/ Z
Axis
7 G) v, E+ s/ E2 u* q L" q/ e0.000000
0 F$ A( _) x k" c- K1.0000007 R6 \4 w$ N+ l3 x9 [' @- R. {
0.000000' [. @9 x7 H. }7 Q& b- F
max0 k2 u; ^0 T: b- I) `6 K) R' A! x
6.283185# V1 l9 V( d8 E2 }* ?4 g" p
0.000000
5 M1 H( `0 Z! F2 E8 H7 jMin( c1 b6 o3 P! U2 e* U) }
-6.283185& T" U' M( C/ d n
0.000000
& h! o5 t; F9 q自由旋转
; @5 L, X! p/ [: ?+ o) E8 ]Orientation
+ \# V" n' ]3 }3 t, Y4 Y-1.000000
" H# O, ^- y+ y6 |/ o3 ~6 O0.000000
4 H6 p; G0 ]' f$ a0.000000
- Z6 F5 R! h7 I' U7 @* {. F0.0000004 Q8 A+ w. ?% K/ c
-1.000000. T1 l( |- r6 ]1 ~
0.000000
9 L1 I6 E0 {# x. A0 B* B0.000000
q- O) x8 q, [) D7 s* h/ L0.0000001 J& ]1 F0 W% c
1.000000
- D& @5 Y4 W3 P! z枪位于飞船下方,指向前方 |
|