- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 h* W. J4 @* w7 y Q) ^. T" v m) A
3 k" g" i; Q$ L( S[Orientation – 方向入门, o/ [6 ^' D! X
-----------------------------------------) M# x$ H( C: B7 D/ X. K! O
0 G8 Q, |1 X9 D. ?) C6 o+ `
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
# [* M6 l# ]5 T6 G画一个武器坐标图# J/ Z1 [' p: b3 H$ J8 W
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
8 [/ B7 ~* Q! `/ N8 V在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。
! \5 h6 s1 y, ?5 V' F" C/ i2 f; O' O
7 b9 G4 G: I3 ?6 B 例如:装在机身“上”方朝“前”的枪
( v& \# t, R1 p$ I6 w! C*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
9 f% a; z8 J" B7 N5 q1 }! y头3个数是1,0,0
; q3 E! `0 W1 O1 V2 [
* L% }7 | h" X; `2 L*机身Y轴与枪的Y轴指向相同2 n ^3 n+ N; I. I# u' D6 L
中间三个数是0,1,0.
8 K$ R5 W) r7 ~! Z*机身Z轴与枪的Z轴指向相同
( o4 S/ d$ O1 o后3个数是0,0,1.
# _6 U: D8 Q% `# z+ }* s/ T4 T根据上面的,枪的方向值如下:8 h/ M7 r( T6 ^0 T3 _/ M: C
1.000000
3 }" @9 l% w: Y) s0.000000# O2 b" M& n) ?( u! z
0.000000$ v, z! s' ~" V8 I
0.0000008 P. ?1 j8 d) A5 Q$ m" M5 q9 m
1.000000$ \; B' d9 d8 W4 Q5 s- i# B
0.000000
?2 Q7 Z- y% \$ R0.0000004 d' b0 H( T9 P2 f
0.000000
8 ?# H/ a0 c: ?1.000000
# e1 x6 R3 R0 E+ `上面的对应方向是指武器的坐标系和机身的坐标系完全对应& W* }7 W% p( _: e6 P
# _$ N6 z" K/ D% q
例子2:枪装在机身“右”侧,朝向“前”) G/ F9 |7 C( R* O+ }
*机身X轴指向与枪Y轴指向相同
, \$ B- _; M. u+ { b1 W 头3个数是0,1,0
& r4 t- \% r/ E w*机身Y轴与枪的X轴指向完全相反( p- V2 y8 p+ n" t- }* D- P- O
中间三个数是-1,0,0.
% r, o/ q% |/ m& H# D*机身Z轴与枪的Z轴指向相同$ i7 a. _6 c7 w1 H
后3个数是0,0,1.
, B }% w6 V: u3 i+ Y根据上面的,枪的方向值如下:
) k/ L* N, K$ m3 L' q0.0000001 a" ~! w9 l9 c6 ^4 @. ?& K
1.000000
3 {$ T3 s, R0 V f/ `0.000000
1 K0 G# @& F& f' m6 _( ]& Q-1.000000
$ S( _% F9 T+ I! o. z0.000000) a$ P; n. L9 n+ b
0.0000000 J, J5 l; m) {0 H6 p
0.000000
" O6 _' m3 z' c) |" [0.0000001 Y. x+ t. \+ P- r ]' X
1.000000 7 s: W0 M9 |' I" |
例子3:炮塔安装在“下”面,朝向“后”面
1 t" Y/ P( U& ]; p) b. }*机身X轴指向与炮塔X轴指向相同
" u( [+ |5 G9 R% J头3个数是1,0,0 % l9 H5 i! \. o9 I& \( z% l
*机身Y轴与炮塔的Y轴指向完全相反
) r9 @( S7 @/ \' a5 ~中间三个数是0,-1,0.
T& \# @, Y9 J; t*机身Z轴与炮塔的Z轴指向完全相反- X* L) _8 ]- N0 m( g; E
后3个数是0,0,-1.
* X( b7 P# S1 K. _" r% L* C总结如下,炮塔的方向值如下:
9 e) E) N3 d# S! ]0 K6 R6 J6 I5 u1.000000$ v& C8 N4 D& Z, J
0.000000. X7 _+ E( M1 O8 F# V
0.000000
: O* o- M2 s+ A0.000000
$ a! p! I4 B1 O-1.000000
% g' _2 |! _/ H6 M& D) q% R0.000000
1 {( F. V6 I3 x1 g0.000000
% t6 m d# g$ T2 Z7 z! W1 f9 n0.000000
4 y) l# S+ x6 O9 E-1.0000005 Y. @. A% P' R% G' V
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
% W, }9 u9 \7 _( |& N- I*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)% J3 {6 }+ V+ u# D3 s" Q* I* V
*机身Y轴指向在枪的坐标系y=-x的位置
, k3 U0 _0 W0 ~4 D. ~7 {中间三个数是-0.707107,0.707107,0
: e1 }/ U. N. T6 R2 I' k0 s- {*机身Z轴与炮塔的Z轴指向相同
. F2 s; P: d+ Z: m% D% r/ D6 H. X5 v& M后3个数是0,0,1.; U" |) {. i* }; m# _. G. W# I) W
总结如下,炮塔的方向值如下:7 U2 a/ a- `* A
0.707107& I7 ]7 \. k# D5 x
0.7071078 Z4 o) |# @3 ~$ l$ Q! m
0.000000
& e: {0 M- X$ \" \* z5 N1 `7 A' ?-0.707107
$ G. i. F! x3 H- z2 n0.707107- Y+ l. c/ k5 x. p9 ^. ]
0.000000
* ^' w ^& Y' h0.000000
' M0 D/ I U5 E. D( m# A0.000000% ^ e* g$ Z1 A4 j! N7 f% Q$ h+ t
1.000000
. y' i; }% n1 U" l$ J9 T如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。% j* K2 p& [, A( ]2 |6 U& o1 u
Orientation
. w C& ~; ?) p% n--------------------------------------------------------------------
" ?" z) ]) V+ N' u& d) M3 } R如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)5 [# a- @# C) w7 B: I
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
( j$ m' V( `- |. j) S& _我们要做的就是利用不同的方式将问题分解成3个容易点的问题:0 y6 c7 e6 E5 C$ L1 W2 R
4 d4 v: ^$ Y$ Y; @# m! c# C1) 先对应方向,我想要武器绕X轴旋转多少弧度?" q. T9 X* S: i" n
2) 我想要武器绕Y轴旋转多少弧度?" C9 s& E" L1 J' @7 z: s. C
3) 我想要武器绕Z轴旋转多少弧度?
* ?( r5 P+ \8 P, o! P
5 Z, ?1 \- U! M1 `- P7 p("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
: I7 b1 l' [4 P% x1 U8 K/ i- x : P5 {' B8 a+ m5 N4 S4 k& U
我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
9 i; M) J. w4 v) e) q 8 R) a' \: o# \% M# I
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
; B$ U8 I$ H* v9 }: R/ z* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。* t) f* a! O- m. O; K/ b
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)/ ~8 R" S Y8 k9 k) y
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
: c7 m4 v2 N6 E: @1 `: W5 V* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
& N; u& o% u# H根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。1 [7 o, v2 M) \+ ^) V
按下列步骤得到你的取向矩阵:
0 m" n) G* ~% z
/ c0 ]+ e' i) Z& p1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
5 M' f4 X% ]% ]3 r) c2) 用{1, 0, 0}代替{u1; v1; w1}.+ [% F: b' D, D4 b3 K: M
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
3 n u0 ]* i9 r: {$ j( ~4) 用{0,1, 0}代替{u1; v1; w1}.8 Z% @! p. r: P& N" G1 N" R! _% l" O
5) 再解方程式,得到取向矩阵中间的三个数
3 B4 d) V( }% ?4) 用{0,0,1}代替{u1; v1; w1}4 z1 S4 T; N& B0 v1 Q7 E
5) 再解方程式,得到取向矩阵的最后三个数
# U; L" f- L& v8 T0 ?3 V0 N! d% a6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.' u- N8 Q0 ]/ i$ F8 p7 W7 M
4 Y1 I/ L) [' ^0 X2 E如果你有一些计算数学的程序进行计算,那将更好一些。
3 A7 G! D& y6 e; S4 o/ h4 J2 P 2 { Q1 G/ B. t) B+ D
激活Hardpoint
6 E, E+ a4 _+ x, [/ _! q-------------------------------' a+ u l& P0 z9 a6 `, C
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
6 c2 V3 }. \7 V6 E8 j但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。! M, G" `* n3 {( P% v
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。4 s5 a7 f, |& J# \
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。4 c- c, D: z( A- E6 P
鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。$ \! a2 Q' }6 P/ }. M
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
7 G0 ~* x% E) P( }5 T% b( Q- A后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。- M, p# n5 w3 W* _. }
参数如下. f. Q6 q* N7 w6 F6 F9 t$ d2 C
Position3 W; _0 |# G5 y- a7 E1 l5 n4 G
0.000000
z( K# g( F2 o( h-1.116736
6 w; G3 D4 G3 B; C( s; p M: c-4.163258- L0 e1 B1 E+ b9 M6 ~2 T! \ T2 ^) x
Axis
9 l& P) q& ~5 `0 Q. _0.0000002 X* H. R' s/ D- `/ e
1.000000
+ I5 e( j# Q/ M2 ~. b0.0000003 Y! w4 n0 t; p7 U4 l# N9 I
max
" H7 X5 M1 y/ g. ?% g1 R% L2 l" b6.2831859 C9 Z, Y$ B3 [! t0 Z P+ l- L
0.000000* M5 U8 |, _* O6 h1 _. |# c
Min# y. n4 P' w. F& b# z( d
-6.283185( S( O8 i, x7 P$ M; y( p5 \- o
0.000000
4 M! H- O5 i# s& t4 L2 ]2 R自由旋转
7 J1 q2 T( A& r: A. DOrientation" G, f" C8 Q$ X
-1.0000006 d1 o% m- C: n
0.000000$ }- p, Y- U' c
0.000000
3 d+ f' f& H; k' B3 k0.000000
- |) z5 r1 G% P+ q( {, D; Z" {5 A-1.0000008 m; j# F9 ?/ t) J: O" y: J
0.000000( S. V9 W) @, @+ ^/ K* N1 d
0.0000006 o% `9 \% F+ k) \
0.0000007 I# p( l( i6 O
1.000000
9 a% I' R- r d枪位于飞船下方,指向前方 |
|