- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 ) C9 \; A9 o) E# R# C+ ]
9 {8 G5 ?# S9 Q! |[Orientation – 方向入门6 D3 B/ g/ B/ D3 E/ }
-----------------------------------------
, i* c$ K5 G4 P% X" m( W; j & I4 j( Y) t" z% j
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。) A* }5 U! A9 |9 P1 g
画一个武器坐标图
) V6 J1 _2 }# a5 i6 u: ~8 s+ bDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
: \0 C# i% {$ G3 W0 J在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。; y* z3 A7 a) ~. z Q1 x/ ]
! Y' L' ` j9 b) m8 d! J& Q
例如:装在机身“上”方朝“前”的枪 a9 {& @/ S/ V# t: X8 Z( T
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同' u' r$ z# i' |- E6 D1 q C
头3个数是1,0,08 R) @/ r; I8 b" o3 F8 b# y" j5 J- |
# F, ^- m# [" }! t; j$ G0 h" o' B
*机身Y轴与枪的Y轴指向相同
, D& F7 W2 W9 w& l. O4 w中间三个数是0,1,0./ Z' n5 U) _+ |8 g l1 U! [7 m
*机身Z轴与枪的Z轴指向相同
- X/ A/ j1 }1 D后3个数是0,0,1.
# J6 R; N! ^. a; W! U. V1 ?根据上面的,枪的方向值如下:
4 J% S; ]% t! `1.000000% d. a0 M$ t8 _% W) b7 Y
0.000000- S0 d" n: ?8 x4 f4 r6 u
0.000000
# V6 M# w& H, _$ l; w0.000000, S/ y; o2 ]! ~1 M( ]( _
1.000000
; B/ T; n7 s O1 M0.000000
0 E4 o) d- v; x; X$ v; h0.000000* n7 m, M1 e* F* ?2 H: S6 y
0.000000# _; l5 w: r" x8 C- y% H p
1.000000
q9 z' K8 ~3 K! x1 `5 z) u& V上面的对应方向是指武器的坐标系和机身的坐标系完全对应
, T% _9 U; X7 k# l/ }( o, Y5 `) m$ J% ~& R5 M7 W0 r
例子2:枪装在机身“右”侧,朝向“前”3 }7 } f& i% m4 r
*机身X轴指向与枪Y轴指向相同) S$ _& W& q5 C- s" J. I
头3个数是0,1,0! O) R$ @9 W s) F
*机身Y轴与枪的X轴指向完全相反
- I H( o b6 O9 D7 U# h中间三个数是-1,0,0. 6 D0 J9 s% d$ ~; b
*机身Z轴与枪的Z轴指向相同2 N# ]4 ~1 Y% [$ R+ K- ?' s9 V
后3个数是0,0,1.0 p5 ~- Y7 n! e/ H# ?8 W N
根据上面的,枪的方向值如下:
, C6 V) Y+ W& Q" K B0.000000+ [3 j! Z( t7 }
1.000000
$ L- [3 e$ j/ p9 \ H; J; ^: s0.000000
/ \' w9 C$ Y" n-1.0000004 e7 [' {$ w% w- |9 E5 O3 D
0.000000
* k/ G9 j, }* W. Y# |! S1 U( _0.0000002 T' g; p ~6 |
0.000000
" X$ z* G" F5 B* P$ p0.000000- f4 Y( i0 Q* l0 n, ]* |
1.000000 1 [1 g! }; V) H
例子3:炮塔安装在“下”面,朝向“后”面 2 @9 A1 d. j& X/ F5 J( u
*机身X轴指向与炮塔X轴指向相同
! I& W# G; ?. P9 s) q头3个数是1,0,0 ! o6 @3 E- e9 Y9 e: _- ~5 c+ Z% h1 B
*机身Y轴与炮塔的Y轴指向完全相反 . j$ X3 P5 @) O F
中间三个数是0,-1,0.
% G5 r% R0 R) W0 h1 r* n*机身Z轴与炮塔的Z轴指向完全相反+ r& A5 p: j4 u
后3个数是0,0,-1.! w% } i" k% A4 N$ R
总结如下,炮塔的方向值如下: S7 u' U$ _4 S
1.000000
8 d5 r# |( u2 b! ^7 I: w0.000000 T1 D" w3 O: B
0.000000
9 u" W0 r, _# Z7 F5 O9 @/ i0.000000
$ M0 N0 Y6 M9 s5 q/ {: V-1.000000 ~) c' J5 ?0 A. S% C6 Y
0.000000
0 M& k; z& l* C4 H6 c0.000000
6 ~/ o7 k2 M& g$ q1 }, D0.000000) u, {, \" }9 d% z; Y, |; H
-1.000000
! H3 w! [2 l/ s; P6 u. r3 ^例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
" K3 u; ]( Y9 ]' x' Z- r*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)4 q1 y) j2 I6 ~6 M
*机身Y轴指向在枪的坐标系y=-x的位置 ) \% _; k9 v5 J
中间三个数是-0.707107,0.707107,0
: [/ h! m3 f1 Z5 l" A*机身Z轴与炮塔的Z轴指向相同
: E4 ~& L( N5 x% `3 _' l) u9 y后3个数是0,0,1.& c. ^9 H$ d9 M+ O% D
总结如下,炮塔的方向值如下:! o8 H& U5 j, o
0.707107
( M/ G% c: @8 b' ?! ~! j$ t0.707107
" |5 m) _ K- V( S% e/ M* z0.000000
& ?4 t+ {4 B. n& H. ^8 o-0.707107
) W8 Y; o1 Q( q V+ b# G; v! [# [0.707107: B. A7 Z+ d& s
0.0000009 b6 v3 @5 n! t9 M1 _
0.000000& j% }1 O1 h8 }; r1 D$ f; N# M
0.0000009 u1 ]5 R# @1 r. J4 E( G% `1 y: i
1.000000* S, z. t0 j0 l: H; ~ L
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。; b/ |) T3 L8 ~
Orientation
9 a2 v- |( s$ s2 B& w--------------------------------------------------------------------! ]' Q: L2 Y5 y" @
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
- y2 X" k# V k* E在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。0 q& i. l7 R& |
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
. i# m, _* G" W* V' X- P/ m * F' v7 H, P# Z7 O- ~5 M( D; ~* J' d
1) 先对应方向,我想要武器绕X轴旋转多少弧度?
+ l3 [# j. G: G4 }2) 我想要武器绕Y轴旋转多少弧度?
2 l) A- i5 \6 r) z3 f3) 我想要武器绕Z轴旋转多少弧度?
0 n# T( p8 O" i , v3 V' i. F) W. L3 K4 z9 D+ ~1 Z
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
* Q+ q; N, f5 n' `0 S. ]
) J0 [, _( a5 j$ ]9 r: ]* W我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
t8 t- U5 _2 r6 M ' J2 _7 O/ Z1 m, d) l- L T
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)! B' s2 B6 w" t# U$ K* r
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。& C: E# l& m9 }: [4 T
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)' j+ }$ k5 x; y! ^+ B2 ~; j! g
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)/ j, U. c7 z8 K# W2 k) C% Y) [
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
/ f) z) r* K" P根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。7 b# I) C1 T$ u' B) \$ t# {) `. g
按下列步骤得到你的取向矩阵:3 { ~, x4 _0 [4 y* D& Z
$ X0 @4 E& N* q5 U) z$ O. B1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.7 _" N e" o9 x" R
2) 用{1, 0, 0}代替{u1; v1; w1}.8 F2 r M$ q1 t, W; H
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数$ I T. Q7 E% F5 P$ `# h( ]
4) 用{0,1, 0}代替{u1; v1; w1}.
e7 r& A. q" w; d; b5) 再解方程式,得到取向矩阵中间的三个数
" I8 q2 i- n, \8 p9 _% S4) 用{0,0,1}代替{u1; v1; w1}( r5 J. p- W9 _5 l
5) 再解方程式,得到取向矩阵的最后三个数
- M8 n6 @% C( b0 n6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.0 s# C% T% u5 F. P5 |, z
- `. q+ R+ J$ _7 k
如果你有一些计算数学的程序进行计算,那将更好一些。
1 W9 c% Z! p* W- K2 \& N: v
2 M! U) K! e) h$ ~激活Hardpoint
4 M! [, g: p! x' C% X' p/ J-------------------------------0 j6 j( I7 Q" a- v/ m# {4 |8 h3 T
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。3 [' C7 J' ^- v/ d
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
! U1 Y9 \ W8 k& [如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。8 ~: z: O0 k, t) A* O3 @" T
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
2 l5 L- N! h4 j5 q# E i9 v5 i! l鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。. U( I1 Y3 |- _. ]' W
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
% D, T+ n! g8 F5 t) Z. n# A后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。2 V q+ x3 S/ i, d0 {; Z# \4 [, [
参数如下
# N5 t. Z T4 e$ p& aPosition
: W& S2 x2 @: f: ^% p+ y0.000000$ v; E3 z" S {
-1.116736
3 |3 \. u3 \. v-4.163258
$ u% ?6 b4 g2 q% G1 V; H+ ZAxis# i h9 N0 `+ \1 g2 Y, L) A+ x6 e
0.000000" ~: o+ D0 T1 F+ J
1.000000. H7 s1 c3 @2 x9 n! [8 A/ h
0.000000
Y. ~* h6 \& N/ k7 cmax
- {$ @$ U1 ~: x& R; M6.2831859 f8 F) S5 |) \( }: \
0.000000
6 g8 u: A3 Q3 r* ?' SMin
/ ?$ i. r5 }9 m, t-6.283185
# b E) @& I4 H U0.000000' L' [! C; l) E
自由旋转$ l; e0 I9 x k# @* i5 O5 H1 |
Orientation# s ^+ f' V1 K, r4 w
-1.000000
0 M8 N0 \+ Q) c3 |# p" f0.000000
( ]1 M2 `. s1 d- ?3 o0.000000* d' t* W2 k8 P2 ]3 n
0.000000
! m5 p! c6 c. Z4 n3 E, t-1.0000009 [/ \5 L/ ~; t' ^
0.000000
' M' I2 |8 ^, G5 c0 R0.000000
8 _( J& o; N! C* @& s0.000000
% n( Y! C3 a; ?9 O1.000000
/ c, N* W' F5 |, X2 r# n枪位于飞船下方,指向前方 |
|