- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
+ q2 `" W7 Q3 D) E
% `1 i7 }( V$ P[Orientation – 方向入门- C* N4 i/ D) w" m. z# z8 |8 z# r
-----------------------------------------5 Z# i6 W, }. q, R3 @8 v" c* n
! {* X1 z5 ?" `, P# Z1 T
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。 z9 X9 m, j; [# q
画一个武器坐标图
q+ C2 g7 Y/ A/ L" h+ s9 fDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.9 X( c& v+ D: x5 D5 l/ L) u
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。% e& [" s5 E9 Q- ]+ t
! T5 y% m" H8 x, `+ K9 i6 z2 t
例如:装在机身“上”方朝“前”的枪 ! ~& x, ^) @- l# m+ J& ?
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
f, Y0 r! ?. a8 [头3个数是1,0,07 X7 ^8 q8 p; r% m8 d, q
5 c: G& M2 s" [7 y
*机身Y轴与枪的Y轴指向相同
7 ^( J. D& X$ u: u中间三个数是0,1,0. K* T4 |4 m( J/ Y$ @4 H
*机身Z轴与枪的Z轴指向相同( _$ X3 @, c( f; ~; S7 ~7 b
后3个数是0,0,1. 1 E, v. q# ]9 r1 |. m
根据上面的,枪的方向值如下:* d9 v% n0 o$ ^3 A8 W5 \, a
1.000000
8 v1 [7 o# w+ ]* j0.0000008 h0 P+ T7 {* T0 X% @' N8 |
0.000000
8 R/ f3 w1 {# @# t8 W0.000000& @2 K2 _) t$ M# ]7 P0 x
1.000000) k# T( R, D- E1 W
0.000000' X2 D4 Y5 [/ E6 Z: b$ M E
0.0000005 o) H' {: b# a0 d
0.000000' I9 ~4 R& G$ o6 D" N$ }2 `) w
1.000000
" K2 i" R/ a+ R& r9 j上面的对应方向是指武器的坐标系和机身的坐标系完全对应
6 d. c( G$ X, j5 n4 [: Z: ^/ f3 T. d0 R/ C% R) g* L! z
例子2:枪装在机身“右”侧,朝向“前”
7 w8 s5 t2 P+ X4 I6 e$ P# v*机身X轴指向与枪Y轴指向相同) C- {* B* D( ^+ O1 o
头3个数是0,1,0
6 c8 C7 ^( t# C*机身Y轴与枪的X轴指向完全相反
- |% G, b: s8 i6 g C中间三个数是-1,0,0. 1 O, d$ |0 t6 x
*机身Z轴与枪的Z轴指向相同
6 Y/ l0 t' g: {( |7 s* M后3个数是0,0,1.) D9 m Z3 q t c& _' D: W
根据上面的,枪的方向值如下:
& ]/ K/ V6 c0 S0.000000
% p9 d6 g* z; b' |( E2 Y3 u" w1.000000+ b v. A6 y# E' p1 O
0.0000005 e$ j+ G- ]7 V
-1.000000 ?8 C! E% w! ?4 _; t
0.000000
1 m9 I* W& [( `4 ]/ g- l0.000000, A2 M3 v0 }# z5 u' E
0.0000000 h' w D# s8 N" O
0.000000& E) I! P% v* _, I) l
1.000000 * |4 b' K& q- Y# Y
例子3:炮塔安装在“下”面,朝向“后”面 ; Z, O/ R8 b, m$ ]$ M
*机身X轴指向与炮塔X轴指向相同 2 U8 j, l0 b4 J4 F) a* K$ u) B
头3个数是1,0,0 " Q Z1 n+ n3 F/ C
*机身Y轴与炮塔的Y轴指向完全相反 ! ~3 F7 l2 @5 Y3 e, u- D2 j
中间三个数是0,-1,0.
2 X$ w4 {! ^1 X% M- L& I*机身Z轴与炮塔的Z轴指向完全相反, ?+ `. L9 V T
后3个数是0,0,-1.
! c) `8 ]. T, }; }" Y总结如下,炮塔的方向值如下:* Y( D! y1 }9 n' ~# k+ E& C
1.000000
9 q/ S# S9 U) D0.000000
/ S% o' k& C* S0.000000, P2 r; i0 K1 e, i
0.0000009 h X5 Z7 i8 s2 a; J3 N
-1.000000. ?: Z- c$ ^* [# l! k. {6 \- x
0.000000- Y5 e3 J. \9 f" y, R# I6 M! |
0.000000 ]0 H! s; @3 |$ }/ e( X: H
0.000000
) r, Y8 ~& N. M& a-1.0000001 N) E) R5 x: A! @, E1 A/ Z/ @
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)& A# j4 M/ u2 U4 a+ C
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
0 r W# _6 _- V, r*机身Y轴指向在枪的坐标系y=-x的位置
: r% n, C5 H* a% c$ a中间三个数是-0.707107,0.707107,0/ }: }3 a5 R! ~
*机身Z轴与炮塔的Z轴指向相同 2 ^6 M* ^# o' [# F8 ?1 Z0 |5 {
后3个数是0,0,1.
1 A D" z9 k' H$ n总结如下,炮塔的方向值如下:1 L) p2 U, R0 y5 M4 b ^ a$ \6 }
0.707107
; w& B) U4 F$ v# P7 g0.707107
7 ]; ^, [, g$ Q2 R4 ~ n; [0.0000003 N5 H9 Y0 ]/ {; O- g# F+ q
-0.707107
: m! }) { ]5 E! [0.7071070 J, J2 i6 y6 J
0.000000" b& R4 p3 j1 z% j8 J4 V( q
0.000000
* o1 z* d; j1 c# ~8 `. @+ h0.000000
; Z" l& I, |. ], ~* e1.000000
! V: I6 k& U6 S如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
: v# Y$ C( t6 v0 G% D+ J K* OOrientation
5 c" x# |1 {4 g$ X* ~" b--------------------------------------------------------------------
$ y6 \$ _1 h8 T" W9 Q C如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)# O' o2 F! w- I$ v. m4 r
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
6 K% q$ q& s/ ]& u4 |! W我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
2 O3 F3 L9 x. @- m $ [' Q& ?4 k0 T7 }7 y; D; y; j
1) 先对应方向,我想要武器绕X轴旋转多少弧度?1 N# l5 `. j2 G3 s% \
2) 我想要武器绕Y轴旋转多少弧度?% P% S5 s" ~$ V4 d. l7 ]) H9 K- D
3) 我想要武器绕Z轴旋转多少弧度?" `7 z' q4 ^9 @) ~, O X" @+ ?
4 J2 W$ U* ?# L0 v7 M
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
" `4 q( Q5 A7 y# [
! s8 R' J1 L, H$ I( W我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:/ ~ Y# }. `% W4 r# u
0 G1 b: z' l) `9 U
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
* M- r6 c. |$ z' b |: k. D0 W* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。
2 [! I: Q8 G' c7 r5 S* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)2 v1 ]- l* x3 b1 J' W$ `
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
5 w3 ^5 o d* m* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
' W. m& z& x$ p根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。. p' }3 a7 S1 S) g2 ]
按下列步骤得到你的取向矩阵:$ `3 }$ v: D* y- u% Z: {; s
8 ? S3 h! \2 Q6 O- q. Y+ `
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
, x4 Z5 _- t+ X! O8 S2) 用{1, 0, 0}代替{u1; v1; w1}./ d/ D0 ?2 z4 k0 c, e
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
4 ]% x0 ~: U5 ~! Q6 s1 R4 B. A4) 用{0,1, 0}代替{u1; v1; w1}.
. W) [/ T. c- w7 j( D5) 再解方程式,得到取向矩阵中间的三个数; l5 _+ ~+ d- p. _3 \0 |
4) 用{0,0,1}代替{u1; v1; w1}
) `2 H2 _! ]# V/ j6 Z6 v/ b5) 再解方程式,得到取向矩阵的最后三个数
$ v9 N! T6 k M4 U2 a/ F q: e5 B6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
* {; U w5 p, G
; s+ E4 a Y, E7 `如果你有一些计算数学的程序进行计算,那将更好一些。0 W- A* Y6 P( G
- s1 d. z, L0 E: ?激活Hardpoint/ O, {; q+ P( }; {; C+ w/ w
-------------------------------2 E, p {# f K1 R. s- i
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。' K' y8 n7 P4 W1 Z2 K) H6 f
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
8 r0 A. D- z4 b* W9 n! B如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。
2 x) n* }; R, B注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
% {7 m' F: U! G; ~% a) `; v鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。3 f/ f5 F5 R1 O" u) `6 C- w
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 ( c/ t4 o, N& V$ N
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
8 s0 z9 p" b& t# R参数如下
( E0 g- `+ A6 tPosition
9 P5 T+ R7 L, \: Z0.000000
' F% Y! Q' ^6 u! J3 f/ R* h. J# J-1.116736" D/ Q0 t6 F! o3 @# B
-4.163258
, k9 h3 d0 T* L2 Y. f6 v- XAxis( G+ a8 y3 q% H1 ?8 g/ }3 H9 i/ g/ N
0.000000
$ [; \* C. _" F; R7 O1.000000
# q+ I2 g7 ?) w7 F) _9 G) r* ? U5 y0.0000007 C5 m! K9 w. _' P) I
max
( N0 |4 s7 b0 k: H6.2831859 r7 l% P# F4 D+ k" o9 L J
0.000000, Y6 x& C. S6 s4 X2 h
Min6 C* e# E0 L& I8 [3 x/ y
-6.283185' j+ K2 ^' d: o5 [/ I! d7 v
0.000000 h/ C, r4 G3 ^. h/ m# x
自由旋转! |( L! d! N1 u; V8 ]( I
Orientation6 p/ n8 F. T9 k/ ?, V- a
-1.000000
. d$ u6 r7 Q* `- m2 U2 O5 O0.0000002 I" J; x, H# P3 O4 j; ^7 j
0.000000
9 P# S% q2 H( e; U: o0.000000
, R& p" D8 G/ t-1.0000005 `8 G2 P2 f/ ~( o% H
0.0000008 r1 u! s5 e; t# r% g1 Q( d
0.000000
; }' T, a2 O" |- B3 }. s0.0000000 h3 H+ ]% }/ u6 M
1.000000
. u; T' k) t; y0 B4 E$ u& j2 w枪位于飞船下方,指向前方 |
|