- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 , V8 r: @; u. S: @/ e/ e4 k9 O
: r6 x$ l7 p! R% E[Orientation – 方向入门1 i' G7 z+ \' }* l! F5 F
-----------------------------------------
/ q( W8 S( k4 w1 s/ p3 D6 o( ^* h8 I
" M0 i/ g1 D) X d i5 J/ H& I这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。& m d( R8 e9 k
画一个武器坐标图; ], K0 x% V( z& P6 ?4 [. A
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
1 \* X$ e8 z: I3 }5 h在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。5 O2 q' `; f+ j" N- ]
. P1 z1 T% X+ A 例如:装在机身“上”方朝“前”的枪
$ w4 B7 J; Q$ \, }0 e*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
* D9 f( h y0 W2 b4 m头3个数是1,0,03 ~# s* u' q% n3 m# {& t
+ {/ `% T* }/ z% M( T* v
*机身Y轴与枪的Y轴指向相同
- u+ E+ g9 B+ F+ ]- @中间三个数是0,1,0.% ?$ Q @- y8 R( R3 k5 Y
*机身Z轴与枪的Z轴指向相同
8 X) n2 p; Z+ |5 u6 f后3个数是0,0,1.
' d! h$ M( `6 _根据上面的,枪的方向值如下:8 }1 S, @: y6 h
1.000000
- `- E: q/ r+ q5 d0.000000
; j: o. _1 D6 a4 W0.000000
@& Y' f$ ]' R! W5 q0.000000
+ ~& T M% s' h& u1.0000001 ?; i$ x9 ~2 F9 p% k" J
0.000000
( L2 o' ^! F/ S/ g6 d9 s3 ~0.000000
3 N0 }/ H% r3 e8 A3 R0.000000, ?& n- w& j% N
1.000000
2 U8 q3 e k4 s( ?; r8 }上面的对应方向是指武器的坐标系和机身的坐标系完全对应% \/ J/ c8 \5 X
1 T5 M& S' Y+ f2 U. H* z例子2:枪装在机身“右”侧,朝向“前”5 r" J. t5 n \7 K6 }# S- Z# B
*机身X轴指向与枪Y轴指向相同
# v. H6 F' m8 U/ \ 头3个数是0,1,0# M- H& x! e+ l) n( h1 A# v" N
*机身Y轴与枪的X轴指向完全相反
! ^$ k* M! Q) M. \* U0 K+ G5 D) O' ~中间三个数是-1,0,0.
3 P. S& |2 u0 J( y; p*机身Z轴与枪的Z轴指向相同
. ~" V0 x' }; c7 C后3个数是0,0,1.' Q: ^2 a5 @, E) o' X0 I) }3 o. g
根据上面的,枪的方向值如下: J/ s) }) x+ W2 o8 c! Y( S% U
0.000000
+ m4 a1 ~! C7 m& N2 z; V1.000000- _+ g/ g6 x/ u" T) j
0.000000
t3 W% G$ \9 e# H-1.000000
/ C4 W; `% q3 Z2 h! t( _, U4 u0 V0.000000+ X% S" w5 m. n: R( f
0.000000
8 J5 O- X8 ^1 A$ W0.0000000 B$ Y9 P. |2 e4 |
0.000000
3 s m! H4 [/ E" {5 t3 n! d1.000000
" s/ G2 M. t- h1 m例子3:炮塔安装在“下”面,朝向“后”面
& p" W% j' A; p$ V! g*机身X轴指向与炮塔X轴指向相同
: Z6 f" j2 T/ b/ x! w4 B0 Q+ p& O头3个数是1,0,0 , l- a- K. P; h" j: K! }1 L
*机身Y轴与炮塔的Y轴指向完全相反 2 c" a# z' G8 z
中间三个数是0,-1,0.5 t1 E- u0 \5 ?$ N
*机身Z轴与炮塔的Z轴指向完全相反
$ ?: T+ \) z8 `* N7 W$ G1 g后3个数是0,0,-1.$ ]* K6 K% e- D) I U! s2 @
总结如下,炮塔的方向值如下:/ ?5 V1 X$ T8 t; [3 r$ h. f( {
1.000000/ X; `. h4 b2 f/ e8 A) w
0.000000/ z( V" V! u4 l% D3 d- S
0.000000: }* j0 G; _; ?$ f- X4 {# c
0.0000003 P- M( u% }5 J$ k) k4 d H% u
-1.000000, i0 ?* m/ \. S9 j" E, t+ z [5 V
0.000000! o, J& X5 x5 D( V# N' s
0.000000
$ t( R) I# g& k8 X) U0.000000
# Q( C: ?1 c( F) P-1.000000
3 f3 }- U' c* @% d; D例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
# ?* W% n- Z6 Q& F/ Y; f*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
1 T, y* E8 b# b. P*机身Y轴指向在枪的坐标系y=-x的位置
2 d) `& K0 d; K7 @3 @8 r+ p7 f中间三个数是-0.707107,0.707107,0, ~ b& d8 y2 {- H4 U! A H2 y
*机身Z轴与炮塔的Z轴指向相同 3 v* h1 v: H0 [7 u* K& I
后3个数是0,0,1.
7 y: f) y L9 I1 ~' I总结如下,炮塔的方向值如下:
0 i! B% g' ?! }& B4 y3 G0.707107
0 _4 h0 P! A8 e4 c0.707107
) e! H# |" \. W+ d& v5 i0.000000* @" ~+ J$ d; e! @1 u- H/ X
-0.707107! ?+ Y1 V" l4 X. K; O7 U, ^% G
0.7071077 w, N; H9 I( i' r5 w
0.0000004 R6 a( C. T, B8 d& {) o* r
0.000000
- `2 J; @8 X, k2 [0 F7 x( r# {' P! T0.000000- d1 p7 M$ G4 Q& T
1.000000; n; E. c' c( e& z$ N4 I) M
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
5 Z$ X/ A% N. q7 N: i+ d% F) ~Orientation , o* l) C% O: t7 U& x; X
--------------------------------------------------------------------- q! G# n0 k" T% m
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)5 X0 B5 @5 t, H( w5 o0 I9 L/ R
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
9 K- Q! `3 K' r; q# G7 M6 ^我们要做的就是利用不同的方式将问题分解成3个容易点的问题:1 ~# T( Q9 c- E5 W9 n
; j) M# V/ t5 F+ ]
1) 先对应方向,我想要武器绕X轴旋转多少弧度?& X7 P' N5 R3 Y4 ~/ Z
2) 我想要武器绕Y轴旋转多少弧度?
1 }- y5 r6 Q$ Y) E3) 我想要武器绕Z轴旋转多少弧度?
1 a' V+ _5 Z' ^3 v" } ) g2 ` L! p4 j3 b4 X( [* |7 e
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
2 j# G" H1 n0 S [2 z6 t1 \& v$ V
% r$ L4 ^# r9 @6 e我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:/ v9 G G0 Y, n( g
1 P0 z3 l& R5 V# M8 P( I
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)$ w/ ?5 Z& W& ?- j) h4 L, V! `, g
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。% Z! f# j5 h4 M+ @0 l
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)
- A+ X. b2 k2 E* Theta W表示你想要绕Y轴旋转多少(例如,左右转)# L$ H6 p$ T8 ?7 f
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)( B: S( M, Q5 F5 i
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。 R( _; [0 X# y( S- ~1 w @# {' B
按下列步骤得到你的取向矩阵:/ C2 A8 k" x& ~2 @: C
# n. Q8 z: ~. j) z4 {& R ~1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.( O% r3 Q4 ], I5 {3 _2 Y
2) 用{1, 0, 0}代替{u1; v1; w1}.
9 R( G" a7 w$ z3 c5 G7 V: b* s3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
! U7 o5 e# y& P4 B" o4) 用{0,1, 0}代替{u1; v1; w1}." s2 r( B( X! R/ D
5) 再解方程式,得到取向矩阵中间的三个数
* r( e: o. x! n: B4) 用{0,0,1}代替{u1; v1; w1}
% D+ f/ \; V2 x4 H8 j6 h9 w3 J5) 再解方程式,得到取向矩阵的最后三个数 Q) U7 z o8 t: P5 q2 {
6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.8 U2 L: d9 P4 z- w$ F# z
6 m0 K# x' L% x- ^如果你有一些计算数学的程序进行计算,那将更好一些。 N. Z8 ^" J1 u" J" C+ O
" X/ L0 G5 x8 w- Q& C. t9 o# p5 v3 D
激活Hardpoint
$ S4 \: L2 q% I+ [-------------------------------
- n8 q: P8 m* R T- B% }上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
* U1 ~4 v) A8 s* `) X) \) D+ R但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
8 \: V% z1 r& o. ]9 B1 V如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。
4 d: @4 T" b7 ~8 x注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
. ^* K" b7 B: O2 T鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
1 l+ S# t( y/ K& g* m记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 2 G$ l f# @7 ~* G. k/ R& d6 Z0 p
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。5 _$ s4 @. R" i
参数如下
/ Q+ [/ G2 H. }Position
" b2 f/ [* m' U: n% {! H+ W0.000000
# Q7 ~4 h! d4 Q" ^' U8 i-1.116736
" ]! _& Q( w- `% E0 ^" i4 s/ |$ i-4.163258
( i" i% B4 J- `3 Y! r! x( d0 qAxis
3 b/ @2 p, K. T( f0 E0.0000003 ]' S7 [7 o( \7 t! S% S
1.0000003 x, V4 s4 V V& H- Q" U" u u, m: M
0.000000- F( S' B* I- v' P
max
) F; ], S( u% w ]. I7 z6.283185$ x2 D# n0 K6 V5 Z( L
0.000000
8 b6 v$ R) e* X' v3 ~& E3 o5 nMin
, N: E- [( T" z" V9 N-6.283185
# J1 G2 w8 F: v) c3 m0.000000
" W% v+ D- `3 O3 N4 O自由旋转
, m2 m3 j' I& c) bOrientation
5 V* M3 } A+ X) z-1.000000
' s' a# b0 p0 T1 E' i7 d1 h4 f' Q0.000000- Q7 b- j* [! u: @8 l( M4 _4 O) P
0.000000
, G/ N0 O: y6 g: g' b! M0.000000& U8 E1 y4 c% ]1 _7 |
-1.000000
% {% w/ Z& q$ u/ t5 D0.000000
& K) [9 c& P3 s0.0000005 j3 f5 J2 Y% C" d1 @
0.000000
, B q. i' m$ A8 t1.000000
6 R2 r$ o! _4 s, f! ^枪位于飞船下方,指向前方 |
|