- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
2 I5 Q% Q" R8 J1 n7 m' d/ B: q" D: U4 i* p7 X+ L! X+ L# |- ?' I/ s
[Orientation – 方向入门) r3 c) @9 ?& E0 t7 h: N
-----------------------------------------" S4 }# }1 _1 s% G- J
! R9 j6 n/ { {* s2 @
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
3 g4 O& N9 k* ^. f( G. D画一个武器坐标图6 x) N6 ~' E" C9 F
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
% K3 [8 w8 |6 X. X在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。$ R' W6 R' O$ i
$ a, O( }+ p" z' ?& b' `% i/ Q
例如:装在机身“上”方朝“前”的枪
, e) v2 N T+ n4 p: w8 |% X* g% O*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同0 D" Z; w% E N% j7 m5 b1 r3 x% \" a
头3个数是1,0,0
* s, }& W- i9 `3 a$ G% @ / h' Z! U% H+ `: c* L" l
*机身Y轴与枪的Y轴指向相同
& X8 D3 o& ^2 d" T; Z1 k7 A中间三个数是0,1,0. C5 N. j$ y: X; g% m0 B9 E
*机身Z轴与枪的Z轴指向相同( r- _" k9 l; L9 h1 K* U4 E
后3个数是0,0,1. 5 h2 ^3 ?) B! G" M
根据上面的,枪的方向值如下:
( [5 D; z! K' l P1.000000
' b4 C7 I/ y: n$ I0.0000000 _ o) I) i3 W7 R
0.000000, q; R5 Z7 J$ Q! o. S' g- s
0.000000
; R& g( w! X/ `- W- [1.0000002 s7 W) H8 J: e$ E, I
0.000000# u. A* a: r$ ` n2 o3 b
0.0000000 s. |1 g. a$ N, r c9 T# V/ Z
0.0000003 @/ {6 L: O* _9 X j) @
1.0000001 l: I, ?1 C+ v9 S0 D! d4 b
上面的对应方向是指武器的坐标系和机身的坐标系完全对应
/ T) Z2 t/ m/ I( W% k7 P" a% f9 t. P; A+ Z; p- c
例子2:枪装在机身“右”侧,朝向“前”8 C- t# d: c* h( |
*机身X轴指向与枪Y轴指向相同* ], N r. P. x. Z( w
头3个数是0,1,0
% G7 ?: r' u0 A0 s8 ] |8 w*机身Y轴与枪的X轴指向完全相反
0 n1 V8 }1 ]6 Z3 n* D1 E) m8 Y中间三个数是-1,0,0.
3 {, }$ S% \' n- Y/ [0 e0 |; U*机身Z轴与枪的Z轴指向相同# T* ]1 y2 r6 |2 t
后3个数是0,0,1.
+ \$ p/ u' f' o根据上面的,枪的方向值如下:# c6 H/ U) m. Z+ R+ P% H8 w. U4 p
0.0000007 F* @/ [+ m) N2 H+ D
1.000000
, ]8 _* Q* F. @$ i- c2 K; c0.000000
* j5 G% y" k: ~/ r+ h( x-1.000000" E( m) j1 ^7 p
0.000000) j! K( o$ ]2 v3 N. S3 v3 a
0.000000
, `2 S1 f4 `2 |, u0.000000
7 u) L0 s* ^5 M+ s! H0.000000
5 |5 ]/ v8 e9 M v+ }) h1.000000
) H3 K% m) b. {1 A: M6 W例子3:炮塔安装在“下”面,朝向“后”面 + L+ q6 L" Z7 Q6 m4 U. W
*机身X轴指向与炮塔X轴指向相同 * K" I1 D8 M6 o2 T# T# t
头3个数是1,0,0
2 C! T# Q" [. ^% D( A# L*机身Y轴与炮塔的Y轴指向完全相反
& e- F& P2 @8 q中间三个数是0,-1,0.
6 r; r: g) D# Y$ f% T4 r*机身Z轴与炮塔的Z轴指向完全相反
' h+ i) n7 K4 f' ~后3个数是0,0,-1.
7 A" I) s9 G0 [# L* g总结如下,炮塔的方向值如下:, u' I& L+ K+ c, E! t6 v$ ^1 ^
1.000000( j/ M3 S: r0 @. ?! z9 k& g( }
0.000000
. T% u( l+ B5 q) s, B0.000000
' h, G+ C I2 F9 u' I( \4 u |0.0000001 Q) a9 C% [) @6 n, E7 T
-1.000000" t, V! `1 |0 `+ J: G i
0.000000
; z$ p5 g; b, F: w# G# V4 Q5 y0.000000% E* C" {% v4 `7 d7 v- Y
0.000000
8 M/ g C2 a! k8 K6 C& Q-1.000000* C3 G* s/ m; w% `! f9 r$ }* S
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)0 g( w! ]' B7 C/ ?; d3 C
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)6 m. z- n' Y3 P& ` |
*机身Y轴指向在枪的坐标系y=-x的位置
: n3 v) C, t( f, Y7 h7 @中间三个数是-0.707107,0.707107,07 [$ W6 b& r8 w& p4 t% z3 l
*机身Z轴与炮塔的Z轴指向相同
! c4 I: e+ m$ F! ~% I7 v2 z后3个数是0,0,1.; k$ {* S2 r0 g5 N; G# w
总结如下,炮塔的方向值如下:' C' c. B* K: ?* W7 b* ^/ t
0.7071078 {4 g, \. @" U9 N+ Y# M
0.707107
! I1 C3 H/ x! ^) J* n0 F* F5 T& W0.000000
j: k# e3 ` H5 w) G1 K V* d-0.707107# n5 ], @3 m9 ]& s; R4 F. y
0.7071079 h6 F t6 }! e" ~6 V' Z4 v
0.000000
; v7 {, f/ p* V7 S" v0.000000! Q) m5 }# p+ [$ {$ Z6 e5 O
0.000000& [, E0 t% Y# X6 C9 y1 q
1.000000 E' c) H+ u' u( Z* ?
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。8 d( q. q9 q8 d" [
Orientation ' w; }7 x9 T+ P& F/ l
--------------------------------------------------------------------5 Q2 |1 t# Z' Y% c
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)9 i# F) j. S" h7 q8 m0 O) A
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
2 [$ Y; S) {$ M; ]我们要做的就是利用不同的方式将问题分解成3个容易点的问题:3 R* ?4 h1 q$ h' _9 L4 ^" ?4 |* n: U9 T+ a
' }, u& P4 c1 Y) X+ D1) 先对应方向,我想要武器绕X轴旋转多少弧度?
8 \: t, t8 e$ w0 M( t& ]0 {2) 我想要武器绕Y轴旋转多少弧度?5 t+ |6 U, O3 A2 e3 T: e& n3 l
3) 我想要武器绕Z轴旋转多少弧度?: N' M! W9 w7 Q& g
1 z2 @% F& n# h) x7 n: i("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
$ C- h* U0 \4 }7 u3 b
9 C2 G5 X6 I F2 S0 W: F, |& E$ @ O我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:" t8 U5 f; ^- v ~
! w! M; p2 ]0 O5 L" B9 }5 d; M! x
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)) b7 w$ H" b% T4 o6 c
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。& g5 \6 j6 c* C! c1 W3 g7 o; E O
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)3 S$ T' F0 V2 C7 O/ m' N, I
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
8 y2 D4 U' S6 B; ?* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
- |2 D* [/ E% e根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
3 \% F& [7 f5 w+ h 按下列步骤得到你的取向矩阵:
, o: Y7 t5 a* u2 ?9 r ; p( f8 t" j6 @. I5 G. k) n( Q0 n; l
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
2 E, E7 U4 [0 l9 W& h. l2) 用{1, 0, 0}代替{u1; v1; w1}.1 h) a: w* U5 t( K" }
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数/ ?! |" d6 u5 s7 I
4) 用{0,1, 0}代替{u1; v1; w1}.# L0 z7 B# j6 T( e# @! R
5) 再解方程式,得到取向矩阵中间的三个数& I0 t! x u% I
4) 用{0,0,1}代替{u1; v1; w1}
5 e/ F% {0 G$ L/ W2 R5) 再解方程式,得到取向矩阵的最后三个数
4 |9 d/ D# F, x1 v9 M( F4 U6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1. j5 b, n- C$ u. ?7 ?6 e
2 W! S% b" Y) v" S6 d" \9 ?
如果你有一些计算数学的程序进行计算,那将更好一些。% Q/ u: A% m, k" e1 V
* b. K. v- I3 t, ~! \$ e% T
激活Hardpoint$ e9 c3 ]9 a) ^( R0 M; v
-------------------------------
" d. l' u) {. P v0 B% K上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
7 L0 ~ W! e* Q. P' w但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
% D/ D4 Y( [) t如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。+ `% r* M. N: [3 z7 k4 l
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
) J* A0 R s- q! O( a8 R1 Y鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
. v* e& H9 e8 T Y记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 6 w' \' }1 i$ y! E+ t* W
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。# |( y6 \- ^% V) c8 b3 ~* H3 s0 r
参数如下
8 @# b' U- K1 ], w) DPosition
* E) J0 K! v2 { \( S0.0000001 s* V- E& z$ i: p+ i4 X
-1.116736
7 ?9 r4 Y/ b+ m$ V-4.163258/ H; Z( f$ P3 p
Axis; H7 P8 M9 s! Y" {* s6 [. c# \8 p: T
0.000000
, c4 x3 k1 D) P- z$ f' o( X# M; I1.000000
: R3 G5 l/ w0 ]7 S0 p0.000000& [& Z3 [; m- c
max. r1 D4 t6 E* N1 }+ U0 R
6.283185
$ f/ S" j6 v2 u$ ^) u3 _- g0.000000/ Y5 z0 x; o; X9 ^" t6 d
Min
: a+ [' ]9 C. g( {5 B/ [7 [5 I-6.283185
1 F! K: x. W/ f+ U1 p9 D& j/ j* L0.000000& H6 T4 ?& K5 y }3 _1 J# k4 S, w
自由旋转3 V' W: k" i7 x( R
Orientation% z2 n2 }. T# I. z! ]' c0 L0 |; A; }
-1.000000
/ G: j. k$ p! r. @7 @0.0000004 B `9 N+ a, {! D
0.000000
# E# G' t" K$ \6 x' J, r# Y0.000000
2 K* l( T( b$ N9 E7 r" E2 j9 ?+ B-1.000000
# H( _$ T( D H1 n4 k: C) s- d. u0.000000( F7 h6 O. J1 a" {* I% e9 _: B0 v
0.000000
0 Z. h3 N# ^! p2 ^' [1 p0.000000' |, f u. ?4 O. G) U
1.000000
# X6 j: v% ~/ R L枪位于飞船下方,指向前方 |
|