- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
1 D0 i/ m$ k8 G# M' x: I
8 M+ _* f3 M! U; h[Orientation – 方向入门, {, O- S$ F% f
-----------------------------------------: d F" }, f9 i5 M
2 p& b. r/ N# z0 U$ f这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
5 S: E% B2 z3 h画一个武器坐标图" y2 V* a7 V2 d& _+ h' ~) }
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.7 S& g" N- A% v8 q) u8 @$ a" _
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。
+ c4 ?3 a. x. n/ P @1 I/ @8 @ 3 A0 H& y, ^/ V( _8 m& z
例如:装在机身“上”方朝“前”的枪
. t) P: k+ R; ]*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同% b$ M [* Y, k: \
头3个数是1,0,0
/ T- x1 A1 t, e% f. w* n + l" d* {: |: s: O: S Q' g6 `
*机身Y轴与枪的Y轴指向相同
# {- f4 V* u- t& z中间三个数是0,1,0.
2 V# N3 I1 M; ^' s*机身Z轴与枪的Z轴指向相同
$ R8 k9 p) w' l! j% ? i9 B后3个数是0,0,1.
9 k2 I1 Y/ y: D' r# R2 \% U根据上面的,枪的方向值如下:
& g4 C6 V8 p+ |. A9 G% M/ R6 v1.000000' G7 f5 {- U. c
0.000000) m- x1 h6 }% q7 X) S; y9 \
0.000000. u1 f4 s Z7 b; f
0.000000: u' C/ x1 ^$ b; G
1.000000, N8 B& |# ], n Z4 i, v+ K; H3 [
0.000000
4 Y0 T$ p' g) s' k0.000000
* p% L2 E. ]) `8 ]& W ?% d0.000000% b7 M0 V1 }: O
1.000000
2 j; N' ^/ w$ J8 A8 M上面的对应方向是指武器的坐标系和机身的坐标系完全对应
9 ~3 D" V+ y7 l& a9 R* l, b
. r" y% ?2 y6 W! _1 E7 u7 M例子2:枪装在机身“右”侧,朝向“前”' ^, U2 T& p: l" q, @7 \
*机身X轴指向与枪Y轴指向相同 F7 |& w, R# ?* f3 i; a* }; m
头3个数是0,1,0
- Q7 P( B1 R: A8 U5 M3 X) c0 Z: E*机身Y轴与枪的X轴指向完全相反0 @" U, J$ c0 ?6 l
中间三个数是-1,0,0. - e7 A/ ~8 {: u8 w) h+ \
*机身Z轴与枪的Z轴指向相同
* R( W. |& @3 @后3个数是0,0,1.& Y5 R/ U* E7 I
根据上面的,枪的方向值如下:- v! A+ Y2 ?# g4 n/ L! P% C0 b# k
0.000000! p$ @9 o1 N& G% k, a, m
1.000000# u( M A4 L! q# G
0.0000008 E( q5 q |! Q1 M' {8 B
-1.000000
" z( B# n# w! R' x0.000000/ j0 t* S& J; n# S7 f5 ^- f
0.000000! X d$ ?" K @5 v F+ A
0.000000
' X ?* k1 N' G0.000000: e" m. w( E6 k$ a1 ^/ d* I! |% U
1.000000
2 F9 ~' R" M- N6 ^例子3:炮塔安装在“下”面,朝向“后”面
' L. ~( c" s) [$ q% ?, v6 O' n$ I*机身X轴指向与炮塔X轴指向相同
% F% |5 Q: U$ i/ Y头3个数是1,0,0 + u/ B: f' [) f, c9 \% N
*机身Y轴与炮塔的Y轴指向完全相反 f g7 u0 \' d6 w. `
中间三个数是0,-1,0.5 D7 L/ N1 Y4 S0 ^/ h: _2 ~: X
*机身Z轴与炮塔的Z轴指向完全相反
, w7 m) y1 }# \后3个数是0,0,-1.* v3 {& l) p. Q$ d2 Q* K: b; F
总结如下,炮塔的方向值如下:/ X. `2 j+ X- q6 o3 N
1.000000
5 m: b c" C1 f+ N1 o; x) F0.000000
2 |1 [2 w# R, H0.000000
) R8 N' l0 G9 m0 S) v* A' b0.000000
# Q4 i- t- V, Q5 L, E! @-1.000000
- s: E2 v* i2 ^+ y( `0.000000
7 j$ Y5 b! g* T( h3 j0.000000" {. B& o5 x- [- u+ b; x
0.000000* A/ P+ P% o" y+ U* u1 n Y
-1.000000; |1 I d& _/ I2 P: Y, G/ D+ |
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)6 L3 d) Z2 u- U3 Z1 K! R# j( W; B
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)1 a( @4 d3 J$ B8 ?" ]
*机身Y轴指向在枪的坐标系y=-x的位置 8 h1 i9 b- g ?, v7 E2 o
中间三个数是-0.707107,0.707107,09 i( G( ^* p2 U# I) Z+ Y8 z
*机身Z轴与炮塔的Z轴指向相同 ; |' m5 ~6 Q- a0 C( T
后3个数是0,0,1.! ~" U7 N- d; H1 k. L0 E; J& G
总结如下,炮塔的方向值如下:
8 p/ F# [7 w* g0.707107
F3 ?' ]+ B# f* \+ p6 I0.7071074 s- D: {7 O4 ~! N! H9 I
0.000000! I1 j5 ?$ ^: i$ Q
-0.707107
. ^/ s/ q5 X# k1 @8 S% T0.707107; V. _0 r! L+ N" W5 a3 E! ]# _8 R
0.000000
3 \ | a& o: ]9 r' \0.000000
0 d0 @- k& I2 {6 h0.000000; @) a* J( y& ]) p3 H) i% f
1.000000
4 z' |3 R, n/ { V/ Z0 R6 u: I如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
( _4 E) i8 `# u1 [$ \* T- [Orientation
# |% j! F4 o$ G, [9 I--------------------------------------------------------------------+ A- {" o" B# B% B
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
g2 i7 S* e" C- f4 n! i) B; k在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
7 k1 F4 D/ a9 ` ~5 V! Q1 ]4 Q我们要做的就是利用不同的方式将问题分解成3个容易点的问题:* M. }" ~: \# Y$ w, i' U
9 e' d2 x5 y$ ^: K1 ~% x0 ~! f1) 先对应方向,我想要武器绕X轴旋转多少弧度?8 x1 Q' d; P( B, u. b0 x; Q, l( s
2) 我想要武器绕Y轴旋转多少弧度?
$ h: H* l6 s8 J* M: ^3) 我想要武器绕Z轴旋转多少弧度?/ L( y @, P7 u$ S8 o
1 c* h: e) h5 z* C
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”! U& s2 i% d. R; O8 x( g1 t
7 K+ F& p" m9 \5 P( |, P( |) p# s) ~
我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:- h2 x* W9 r; m4 C/ Q' W
! \% a! K1 {0 s, z% _* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
- F: |4 r+ i% i- B% v/ [; Y% B* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。% F: F. _4 }; {2 _. Z9 {& ^( w* _: d
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)! j, \1 r0 V9 w
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
; b2 H, S7 F7 C+ {' ^* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)+ J6 ~: o# e @& Y2 U$ |
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
/ a+ ]! p" { e, }6 W! v 按下列步骤得到你的取向矩阵:' Q4 _" Y6 j" i. b# u
) x' Q x( H0 U7 ^1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
+ n" b- z& z: N" I0 O& J! s2 G& y2) 用{1, 0, 0}代替{u1; v1; w1}.
8 e1 w: v: R/ E3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数! H8 F' Y3 o; i' I% a
4) 用{0,1, 0}代替{u1; v1; w1}.4 q! {3 I, D1 _+ R" Q
5) 再解方程式,得到取向矩阵中间的三个数
7 \ V* x& F! n `* a4 \5 `5 r4) 用{0,0,1}代替{u1; v1; w1}
* N1 F+ \( ~+ {7 d" D+ {7 Q5) 再解方程式,得到取向矩阵的最后三个数
: l2 f+ j4 b1 G9 E4 R0 E! Q! U0 [6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.& |6 r( l7 g% U8 V4 R
6 Q/ y7 _% S' E& V/ T- c& o
如果你有一些计算数学的程序进行计算,那将更好一些。) W& A$ C7 e V3 k
5 v! G& K# f8 v( c激活Hardpoint
+ M/ U. A) `0 w1 M( q# g' X& A-------------------------------! Y- [7 { Y- c
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
4 [7 N% _" B0 n/ P. x但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
$ m1 t1 s; q( S' F, I- i# S0 L如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。7 F- [- x8 s t/ j7 K" O$ ?
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
9 ?. |9 Q* D& P" N. m* _# o鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。! l" r7 I- h" f" j! z, W
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 ( {9 S# Y: @: Q# K
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
H" |& {9 c! \7 A& {: t/ _参数如下
" Q. b" V" r( P$ Y' W# b. nPosition8 x: l3 o+ v, z! b* L3 x6 B
0.000000
( g! C) o& H& q6 U-1.116736
Z: f# h& m. T1 G) k-4.163258
; y. X" w+ U$ J) v, H' r& v! hAxis8 K2 K/ c8 H& ~: P) D' u
0.000000* ?0 ?% M5 P. }( g. j
1.000000
8 G! k% C( W N5 i0.0000000 R ^1 a% @# S) l' e8 V& F, E4 L
max$ ~2 b' P: G9 U5 s/ l
6.283185$ l9 A; m" f1 u3 }" v q2 |4 S# d
0.000000( { a2 k+ R5 T8 M% l
Min/ |$ _1 L/ K( I6 z( J
-6.283185
; V% x4 H. w Z7 k9 g1 k% k0.000000/ W+ F5 V6 j( z* c4 z6 X4 h2 h! o
自由旋转 s% W$ i7 { S* q
Orientation
* U) K- q* E. ~0 x. {) j-1.0000005 Q% J P# x8 U- k7 H# c8 M9 ^
0.000000
- x/ s' d( a% R/ `$ K5 n# @ t- [+ ^0.000000/ v2 C% U2 a4 t$ c1 z/ v
0.000000
# I; D7 r6 y6 u-1.0000002 ?" E, Y( V/ ]7 g) k1 P: _0 a' R5 P- O
0.000000
( ?9 T, L) a9 A& e1 U" Y/ H0.000000; E' d. b9 S$ p$ V
0.0000001 [5 @( J) b+ B
1.000000# z" t" X7 {" X1 H! L4 R/ M
枪位于飞船下方,指向前方 |
|