- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 3 ?1 u S3 ?+ z. ]) r& d1 m) n d4 g
* B, J; R+ H5 u# b1 `
[Orientation – 方向入门
4 c- ?. ?- B/ D4 Z8 f) B-----------------------------------------3 ?" R3 }4 b! j6 [ s) x
. b7 b- y2 x% _这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。: |3 u6 \# t. Q1 P5 V
画一个武器坐标图
0 b6 P% X) H$ b9 N" \8 e7 HDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.) @$ t- C) e v- |$ o w8 d
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。3 n6 @# t- P' f# H
7 E: z1 P' X' E' Z: h 例如:装在机身“上”方朝“前”的枪 s7 |7 u* F# l: |, c& u
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
& C2 Z J7 l/ ]3 A2 ^: ?头3个数是1,0,07 G) H- x9 d0 Y; m: z) q
2 @% f0 c" ^% T8 l! y$ v- [*机身Y轴与枪的Y轴指向相同$ |+ p6 C& H0 b
中间三个数是0,1,0.0 _4 ?; m( p/ g3 f
*机身Z轴与枪的Z轴指向相同: O! v, y6 q5 R: b: a
后3个数是0,0,1.
& }, d* q. r, X; f根据上面的,枪的方向值如下:- {: I4 C9 i% W- N/ V# X
1.000000- B# z. H+ I9 m
0.000000
/ l' H' h# F7 _9 h0.000000
% Z& e$ N! y6 Y0.000000/ F& Q* ?" n+ O! x/ x* t( w2 ?6 T
1.0000004 F6 i( o; t! Q
0.000000
; i0 m. _! p8 |' E: [! r/ s' Z0.000000
; \! k0 U' |. D3 O1 J0 h% ]0.0000006 }5 O# b2 p7 ?) d
1.000000
) F, @4 K$ o1 ^7 W; j6 S8 X- W% J上面的对应方向是指武器的坐标系和机身的坐标系完全对应, Y0 L2 _# c& \: _" }8 B" }
- x2 B6 i0 w7 { E) c例子2:枪装在机身“右”侧,朝向“前”
# [% a" Q+ ]% [1 [*机身X轴指向与枪Y轴指向相同* X; W) O- k) d0 W
头3个数是0,1,0
1 {: @" Z. U# @ N1 S. B*机身Y轴与枪的X轴指向完全相反
; W3 O0 C( {5 D# | }中间三个数是-1,0,0.
8 _: b% K2 z3 M8 c& V5 W P*机身Z轴与枪的Z轴指向相同
" G3 {0 Y9 _% n% \0 E后3个数是0,0,1.
; S! m/ T5 ~ Z7 H根据上面的,枪的方向值如下:
% x# m: R1 N, [2 o8 w# E0.000000
# Z+ V. _4 J. @% b1.000000
( [' e8 Z+ [5 X: }7 K3 P9 j- J0.000000* Q l! f% `. J5 V/ j
-1.000000
9 y; I( [# @- `0.000000
% c" e' j) z; K, f) A# [- n# E0.000000
* Z, G% c- v9 b0.000000
9 G/ e9 T& o6 X+ N4 F! Z1 S0.000000
9 T" Y a9 N" W5 P6 l! N1.000000
, U0 O+ @5 f, R2 z2 b, i6 h例子3:炮塔安装在“下”面,朝向“后”面
, Y( P# G6 G9 H# S! N*机身X轴指向与炮塔X轴指向相同 ( J: m' F( Q: @! S6 F0 f/ L$ B
头3个数是1,0,0 % q8 I% ]2 }2 t- m- D9 }0 T$ n
*机身Y轴与炮塔的Y轴指向完全相反 3 b" X6 g/ b9 _/ }/ k$ v5 p
中间三个数是0,-1,0.
3 r6 g; F* I& q*机身Z轴与炮塔的Z轴指向完全相反* |9 D1 d% q; x
后3个数是0,0,-1.& w7 E" ?; L7 g& } f
总结如下,炮塔的方向值如下:
$ Q6 d5 u. ?, L8 H1.000000' H5 G: z$ F' p3 D, ^3 \! ~
0.000000/ m* |+ L6 a" q5 A
0.000000
) ]( u- O( k! K0.000000
! g4 J, Z0 [# m-1.000000
" }- P! t; X: O5 \( O) y/ N0.000000* T" q; D, |: ^" [
0.0000007 [/ w" v2 C S, r F
0.0000008 @, F& f5 y* R0 H7 X' q5 }
-1.000000
9 ~4 h' i* p/ \4 O# D0 E$ P例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)! Q- p7 l0 ?, @. [" E( E/ n. }
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)3 r5 r% B3 O" `# b2 X" @
*机身Y轴指向在枪的坐标系y=-x的位置 * N! Y1 Z8 N. H& C6 u- ^0 j% J
中间三个数是-0.707107,0.707107,0
+ P7 X- [4 k/ R1 g, h+ _0 u: H*机身Z轴与炮塔的Z轴指向相同
) a9 f; z. C! K后3个数是0,0,1.
2 B, q# ~7 D9 v总结如下,炮塔的方向值如下:! W4 T* s: y k. |1 q z( v
0.7071074 V7 E, a; Z5 A4 q# V
0.7071075 p9 e* f/ S. L* U0 g, {
0.000000
8 m. V6 L0 `' R" O-0.707107
' ^/ `' G8 b# r' [& ^- D, A6 A9 |0.7071075 ~% o& j9 U- [, J/ M. D
0.000000
1 O3 K% _; `6 X0.000000
2 H F- x9 y$ P0.000000
5 e9 Q! a6 X0 e! F* o& `1.000000 P( r/ y* F5 F# r# j* _; v
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
1 O' D& u8 c9 oOrientation , z# E8 z9 m1 M( D2 Q0 l
--------------------------------------------------------------------
7 m6 i8 h6 k6 N: a2 S; E如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)$ n# A" e$ @9 Q
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。" M/ Q. z7 @0 b' ~6 f3 }; D
我们要做的就是利用不同的方式将问题分解成3个容易点的问题: K2 T" S- v& \/ y- M
# R D$ b# S4 a9 ], q7 y1) 先对应方向,我想要武器绕X轴旋转多少弧度?. s3 u7 g' X7 o9 N
2) 我想要武器绕Y轴旋转多少弧度?
' f2 b. y4 g H+ ~& b. L2 L( A3) 我想要武器绕Z轴旋转多少弧度?
; F0 Z* S& H4 Q3 Y* ], }. k- v
0 C: X1 ~+ t M" [; H("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
: B' V; e' i: a7 R
! u0 N0 M' q6 m7 }$ _我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:/ K& I9 D+ l+ p6 {- r% k
# P- ?# [. J4 i5 O3 k5 V/ }: S
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)1 | E: X: Z: c' t
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。- g( S* B0 K4 k
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)
9 [. |3 O1 d5 U( V% [ g) O# y* Theta W表示你想要绕Y轴旋转多少(例如,左右转)" ~ c/ y3 ~) I
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)% A2 h* c- m5 r, F2 Z% A8 I
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。( G1 W. f6 D( L1 x; Y' @4 J
按下列步骤得到你的取向矩阵:0 o O8 E' o7 A4 x. n
4 g0 R6 c" n- y7 I
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
% a4 _& {% n8 o& d2) 用{1, 0, 0}代替{u1; v1; w1}.
% P! z7 ^- J0 @2 c3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数 m; H7 y" H! o' m
4) 用{0,1, 0}代替{u1; v1; w1}.
: B9 C5 h9 Q; H0 L0 x5 N6 h5) 再解方程式,得到取向矩阵中间的三个数
6 W( M: k9 N+ C6 i/ o7 H2 o( k# O4) 用{0,0,1}代替{u1; v1; w1}
2 h6 t# F: y! d3 i5 V9 r T }5) 再解方程式,得到取向矩阵的最后三个数
% a2 i1 Z3 W/ V& B) m6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.& n0 l+ s7 [" J
! O6 Y% L+ a! O8 k( @/ u如果你有一些计算数学的程序进行计算,那将更好一些。9 I8 z6 f# [! ~
' p& t) L* ]' S+ d: A
激活Hardpoint
' P! i/ E( R$ G# f& O7 N; S-------------------------------
" \- r; S: |4 N m' e0 s上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
8 Y9 ]2 R& E3 ~, [8 i. \1 P7 w但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。* N5 U: M9 u$ M) x7 q8 n
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。. F: p% p# ~8 z; C0 x h
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
, _* W! G, ~( C$ l4 d+ c2 ^/ L; i鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
& F k' r, m1 C& b5 O. \记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 , i# s Q* j F
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
0 u4 p) G4 v# f$ D4 x [$ J' L参数如下
: g( e$ Z4 `3 {9 Z) U0 uPosition# G( r/ }5 s8 b& j/ O
0.0000000 k @! l- X. A
-1.116736; }! A" u/ L- {8 I
-4.1632583 e- M+ T1 r! ~7 T# R# u
Axis' ?3 {$ ?' {1 m& ]' i- k2 V
0.000000
. L0 N/ X' z, M2 }" [6 C$ r7 F; k/ X. i1.000000 ]2 b% ]/ A; V" y) W- t
0.000000
, I0 J! @0 ?; z3 U5 r, g$ tmax _2 M* ]5 C# |' c! f4 @
6.283185; `# Y' h) e0 o/ j5 i- n7 s
0.000000
8 t- c% `1 |6 aMin( E- d' n& l2 M; P) w8 ~
-6.283185 l, Y' B# x. K% t! A, P
0.000000
* ~6 l! Q7 _8 L3 G2 X自由旋转( v; h( x( j# R; h
Orientation
6 J, N. }; K' V. P: ~. x: p) ^1 I-1.000000
+ R4 @2 P' U# X; z0.000000
2 g& q: ~- k( l! C' N+ A0.000000 A( X5 F/ W2 a0 ]$ s
0.000000( L1 h9 z2 D4 @3 Q! U
-1.000000
, y0 O: v( v% o c8 m- {( F& v0.000000! D2 s4 y, a& S# l- h3 j, Y
0.0000005 p+ _/ Y* \: U4 U" M
0.000000
: Z0 Q1 `8 @# ^/ A4 J6 {1.000000+ Y0 \: Q: q$ x* M; ~/ c9 W; |. D6 ]5 a
枪位于飞船下方,指向前方 |
|