- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 2 M1 W" ]0 {& s1 Q2 K8 H* t
/ h2 c! y* @: J( c9 a+ K* I
[Orientation – 方向入门4 Q6 S; M1 i: `/ g1 U& R
-----------------------------------------5 x/ X* F3 M$ r; G' i) B! l
" L4 c/ {3 M; X/ i5 m
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
: K+ G' z" X/ K4 \4 a/ ]$ L x画一个武器坐标图
# w6 J9 k5 }6 v& mDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
! ^" D* w% W5 v, P5 }( B/ A在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。
! S0 G& w# c+ D5 U2 k" H ! S+ E( a5 l6 l, x5 C7 y S
例如:装在机身“上”方朝“前”的枪
7 j( Y* I6 t, I) }/ l*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
' O9 N* m2 x1 a) W0 o头3个数是1,0,0- Q0 i$ n) ~% q/ @! f! `
% \3 n* ^% \) b$ k9 N, ^ w*机身Y轴与枪的Y轴指向相同. s3 s7 H: f+ O, h4 j+ R
中间三个数是0,1,0.
8 N/ T% s( o8 W% u* I. D0 |*机身Z轴与枪的Z轴指向相同
3 ? L' A" k0 e5 \后3个数是0,0,1.
9 H1 l- Y/ m* k. M& k根据上面的,枪的方向值如下:+ S- U' W' s6 b) m/ a+ x
1.000000
. ^; S* W3 K; @8 p q0 m% {/ h0 }0.000000
+ m, O/ K _+ j/ \9 H0.0000005 _5 Y2 x) w: B1 Y. V5 u( @& W w
0.000000
F0 Z" L( ]8 f# U- o/ o1.000000
8 l/ {6 x' o; W0.000000/ K7 t/ U6 X. Z; s
0.000000
! D( u( l e1 K4 U* e" h. P& @0.000000
* X5 F b$ g! D$ `/ O7 I" }: w1.0000006 _# H! ^! v7 M
上面的对应方向是指武器的坐标系和机身的坐标系完全对应4 z* Z" P' W& w6 m o2 ]
6 S. @1 O: C0 W0 r3 `- m" D例子2:枪装在机身“右”侧,朝向“前”
3 [4 G. ~# N* I* o0 y*机身X轴指向与枪Y轴指向相同
7 s* b7 \: G+ ~4 T 头3个数是0,1,0
% W/ r* s/ Y' u0 Q7 i*机身Y轴与枪的X轴指向完全相反' W1 ^7 A7 A: Q8 {5 N8 N. N1 r
中间三个数是-1,0,0. 0 `9 k3 ^, u% K& _8 }- i
*机身Z轴与枪的Z轴指向相同+ u0 f9 W) ^# k3 J2 R7 t: K
后3个数是0,0,1.
4 {6 N2 G1 X$ a8 ?* [根据上面的,枪的方向值如下:
! Z: a" Y$ P; M& @) x! u0.0000009 a. s8 P1 H" m! ]) L, J8 D
1.000000$ U4 ?/ D% n4 F" h% R' `. {
0.000000
, F. m- Z" X8 t0 G-1.000000
) C4 I0 j9 |. q; h0.000000
2 r/ Z @. O$ U1 C! S3 X+ K0.000000
+ ?( {8 N8 z) \0.000000
5 l* [: h: k; _/ Z9 F7 Q0.000000$ E6 v/ Q0 |3 |9 T. p
1.000000 ' t* c) A, h0 [
例子3:炮塔安装在“下”面,朝向“后”面 @% M. o6 j* j( v8 y, K
*机身X轴指向与炮塔X轴指向相同
/ @/ L) U7 U0 {8 Q头3个数是1,0,0 6 }1 e4 x; P7 L
*机身Y轴与炮塔的Y轴指向完全相反
' a4 \" M1 a o; X3 T+ y# \中间三个数是0,-1,0.
& ?; ~$ o4 }' u7 w0 `*机身Z轴与炮塔的Z轴指向完全相反9 ]/ Z' s/ B4 u
后3个数是0,0,-1.0 H) N, \, L* N* Q
总结如下,炮塔的方向值如下:
9 r8 h3 H& R7 f( A6 F. V1.000000- c% T3 v$ i+ d' S
0.000000
* i0 O) i$ G' T9 b& y5 ^0.000000
! _5 _/ K7 g7 j% R0 y0.000000
8 [- C% v8 v( D-1.000000
9 h2 @ A. x# o$ A a z- n* f0.000000! \, J+ i0 c% o4 I
0.000000' p1 N2 ?) e* H1 o* Y9 p3 X* O1 p: j" c
0.000000# @8 ~4 y# D7 k" B7 ^
-1.000000) z6 n+ T. g* L
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)& o. E! g( [7 q. \5 g
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
: E/ T/ h- ?$ Q8 z) e+ |: U0 u1 X*机身Y轴指向在枪的坐标系y=-x的位置
5 O( M( f4 b! _+ F7 ~中间三个数是-0.707107,0.707107,0' V' a8 E) |+ X5 e, {
*机身Z轴与炮塔的Z轴指向相同
; F! h# O9 s; J8 v- w后3个数是0,0,1.
. P/ a* f: O4 j3 o- g" _7 j& x总结如下,炮塔的方向值如下:
" b* y6 p" {& b* M; I+ _! L" a6 _0.707107
" d0 S. S0 O* X8 |0.707107
: Q( P" P& K- D% C% }; b0.000000
4 `7 p( u& G) z7 a' O-0.707107
* t ?- Z: l# s" R/ H( t0.707107
7 H. P" Y$ {7 o/ J: b1 z0.000000 _, N1 @( u7 A0 t4 u
0.0000003 u& H* a; `9 P6 @: L8 q2 x4 e9 W
0.000000
* `; }; ~* b `/ d8 d1.000000
& t7 ?) ~) X5 J! E如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
3 h, J* i. W `" VOrientation
9 K: _: r! V$ f* _: q4 K5 o--------------------------------------------------------------------
5 E! w/ Z( Y7 W% e: B' C如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)/ }2 p e6 e- o* \
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。$ f/ |( ]' z. C3 A7 M
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:. T6 [: b: L( @; `! ]# k( V
" S5 v7 s( Z' u
1) 先对应方向,我想要武器绕X轴旋转多少弧度?
( R2 V" t- Q. v3 y9 o4 l2) 我想要武器绕Y轴旋转多少弧度?
: i/ I1 H, |( X# _2 c. C J3) 我想要武器绕Z轴旋转多少弧度?
/ M/ m/ p' @ T) b
3 i7 T+ T I; X! b8 K- F8 u("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”4 a% n* ~+ k6 |/ b2 g' f0 k5 g" [
9 _# d* w; [$ o3 c3 R" X- p2 [3 |我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:+ ?/ r2 Y9 A% E4 j7 q) u, e# _
9 y+ Q# u$ `$ _& O; \ ]* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)+ p8 g& c z0 z; [4 l1 w. N
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。, @/ q3 x# Q6 h: R: F9 o* d
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)4 X, B* Z: u$ O! b+ r
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
/ c: \7 Q/ z- ~; k5 ?# `* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
" Q5 X w& Y, U& F1 ]% g, D: {根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
7 m/ i U: I) | o9 P* J' x 按下列步骤得到你的取向矩阵:
: `% I8 [" C+ {2 t% p& y# V
5 F" U1 O( U2 ]+ M% V* R1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.$ g/ w/ P' l/ n8 {9 j7 P* R
2) 用{1, 0, 0}代替{u1; v1; w1}.& N' s. f+ M i
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数" C; V9 S3 F6 b: M: l1 s; p. x! V/ y
4) 用{0,1, 0}代替{u1; v1; w1}.
- ]3 s# q$ [4 y5) 再解方程式,得到取向矩阵中间的三个数1 e# K3 l1 v. c
4) 用{0,0,1}代替{u1; v1; w1}
- r% s' m/ ^# I% m1 e5) 再解方程式,得到取向矩阵的最后三个数4 V) Z* Y% Q" V7 P: J+ b! q
6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
5 q5 m3 I5 G7 k+ L* o1 ] z& i# l 4 H$ b {$ D" x9 {0 H2 {
如果你有一些计算数学的程序进行计算,那将更好一些。
9 v$ C& M: K7 v0 r 9 a& a4 X d3 g) {) [6 J( l8 c
激活Hardpoint, n, I2 u" l Z$ }3 N
-------------------------------
( ^' t* E x m9 k4 F; ]) r上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
, G% j# ^4 B' ~+ F# B2 x' ?但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。+ F4 h9 J! e0 D" b* P; _
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。" y& ]$ y, {# [; Q$ b8 h s ]
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
5 s* g; A9 L& x6 d鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
% B c. D& m" ~0 \记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
( i, f# l1 \9 r; H$ K后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。9 k- f6 G" o5 y! c+ P- n0 T
参数如下& G( w! L8 g' R" s
Position3 f; I2 x% h( S8 g, i" y* F
0.000000: k7 H+ h; q8 a6 T( P
-1.116736
3 y3 Y" Q! }% T$ t! l5 P-4.163258
3 l. n' [+ G7 I+ C1 ^; q; _Axis
, I+ [ i' j( A0.0000001 k- r1 f+ T1 p0 ?
1.000000# K2 k% o" ~6 B2 O/ h8 }" _
0.0000004 K- u; i+ H* x ?8 k; A3 s8 }8 O
max
5 o5 @' h- j' c2 b6.283185' B) i/ P; [. @ C5 `
0.000000
; n) z3 s( P& |' I2 R1 L. bMin5 ]0 |) Q2 R3 C% e" J
-6.283185$ x3 ~6 ^0 q2 d. x' W
0.0000004 E* I' B: P1 L- x
自由旋转
$ ~( e! ^ z9 }, OOrientation' P1 K6 v2 _% F: V. |! ~
-1.000000) v. _' q& P( P- s; D7 z
0.000000
! J3 u c1 ?, O6 u. i0.000000
C! G3 M3 l1 q- _0.000000
8 P$ J; x7 |! h" b* g+ c- a9 @-1.000000* }, m0 B. `- v8 g
0.000000
: Y ?* T X/ ~( x* b* g0.000000
7 I; b& O0 Z. W/ a% Z! [, ^, Y0.000000' E. ]* ]* {3 W' `' a, X
1.0000007 r& y+ w/ u" X3 l: R
枪位于飞船下方,指向前方 |
|