- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
' F/ `3 E0 ?8 I2 J0 V9 `
/ y" ]4 C. r2 e" B c/ N1 }) w3 k' r[Orientation – 方向入门
' x: y4 Z+ k" I. f2 P3 g-----------------------------------------
" C0 S+ p5 b- O: l, U$ y
# a& Z a9 I6 ?这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。2 P+ u) A; A: M. A. A
画一个武器坐标图
) }+ w# Z1 w8 v0 ^DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
8 H. s0 F% J$ Z$ u2 k7 B在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。' h2 f) p. D- g
" Z/ w% u& m% \, H# k 例如:装在机身“上”方朝“前”的枪
+ M6 i& s: v$ b6 Z*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
( O o, z3 q6 A0 m0 w& `头3个数是1,0,0. g2 v. h8 |3 j+ G) K
2 Q4 t" @/ g1 Q*机身Y轴与枪的Y轴指向相同1 a; `& `" L% a; y& q& Z& P
中间三个数是0,1,0.
" D _+ E2 }5 C2 a6 F, Z+ _*机身Z轴与枪的Z轴指向相同
3 m9 c: T% y; r# Z后3个数是0,0,1.
" ]' G( q. {) w) D: h/ T6 H; h+ @根据上面的,枪的方向值如下:. a0 H* t$ E! `' k& `0 ^0 ~& c2 ?
1.000000) I( [& s2 y2 D
0.0000008 O$ S' e5 I* [! V! t! h, h% o
0.000000
8 {. {- r" Z C# K& k8 j0.000000+ |/ P6 E l3 d3 h2 S
1.0000009 b% q+ g6 K& j1 D" ]7 {( @2 ^, [
0.0000007 {7 Q# s/ i9 v
0.000000
+ r3 ?- _5 t/ M" Y3 P. U, m0 F" x' r0.000000
: u+ }, X2 Y4 P- f1 d/ ]1.000000
$ D' G' Q4 I) W上面的对应方向是指武器的坐标系和机身的坐标系完全对应
: Y4 s& u/ G: i! p1 g* X. m9 H/ R/ b; C ^
例子2:枪装在机身“右”侧,朝向“前”6 ^$ u, W$ C, |7 a6 ?5 J& r
*机身X轴指向与枪Y轴指向相同: t& d' ]. g& R+ h8 N5 }
头3个数是0,1,0
, U. B8 H8 m. h+ X9 C*机身Y轴与枪的X轴指向完全相反
% B% K0 v7 r3 R$ b) p中间三个数是-1,0,0. 3 B$ H; E! c! [: m* {+ a( c
*机身Z轴与枪的Z轴指向相同2 l) h* L9 a9 z" {$ Z( p* @- g
后3个数是0,0,1.
5 b5 b+ }2 y: y4 v' \2 t7 V根据上面的,枪的方向值如下:
& i- f5 b0 w4 ^ m/ A) A0.000000
' U: D7 s" r% U! N1.000000/ Y$ B! b; s; d+ S3 h
0.000000" g3 w# W2 k. b9 I
-1.000000& g8 F0 e9 b0 M2 a+ g2 d. J
0.0000008 i+ b i1 ^4 ^, j/ s e
0.000000! A1 E1 n: E! W! [
0.0000004 @! h* l5 R6 l; m0 Q
0.000000! ]& [8 l! b- U3 _, D. X) w
1.000000
0 m9 `# F8 s; Z; V- [0 z9 e% o2 _: e例子3:炮塔安装在“下”面,朝向“后”面 1 g. C; F' r) R) B! n4 a
*机身X轴指向与炮塔X轴指向相同
) f/ B8 ^* v. B% m头3个数是1,0,0 4 V1 x$ O4 P1 } `2 `2 c# j# Z
*机身Y轴与炮塔的Y轴指向完全相反
5 U$ W/ f1 ^8 g中间三个数是0,-1,0.4 N% |6 T. d9 m7 ?4 a5 ], r( h0 o8 p
*机身Z轴与炮塔的Z轴指向完全相反
, r$ }% J0 z$ P" G( N" P, e后3个数是0,0,-1.
8 ~! E r8 I/ z6 u5 X总结如下,炮塔的方向值如下:
: l1 t3 S# Z( ]' e1.000000
* N( Z" z: v" [! s% |+ F0.000000
8 d7 G/ K2 A ]. y9 j# Q0.000000' m$ _* o# P& |( |! l" h
0.000000* w- ]3 U, ^) R8 n. t$ H
-1.000000
6 M N1 p5 X, h' u. s5 Q8 \) p0.000000, o! C0 o2 i$ @* c
0.000000
6 [$ h! s/ [' h/ k0.000000
9 W7 k, ?' M+ ^4 R, ]" z/ S-1.000000
+ w4 N. r8 E; r# `例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
4 Z# i4 `/ l. F _; r- d*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示); B( Q! B; ~& w% J1 V. ~4 b6 j
*机身Y轴指向在枪的坐标系y=-x的位置
/ j! I, p2 i# A0 b- a中间三个数是-0.707107,0.707107,0
2 j( j, s: l$ q% J6 h$ t8 p6 X*机身Z轴与炮塔的Z轴指向相同
% d* @7 D' P# ~后3个数是0,0,1.
$ a9 a3 Z q- F. y3 B总结如下,炮塔的方向值如下:+ K3 v* j4 u7 V# J
0.707107
, K C0 `" i) s# k, D+ \- R0.707107/ o( d3 q1 n3 A2 E
0.0000006 W2 e9 E7 M% L3 c
-0.7071070 F3 U4 o( H2 D" z4 E! q
0.707107
. H+ R0 Z5 q9 q6 F5 Z0.000000
7 S1 j4 [( d, {/ l: F9 o" c1 }0.000000: U4 l; a# D9 J* h3 E$ A
0.000000% j# I# ?0 |4 L9 a: _
1.0000009 n* n# U# k8 D* d; e( O" g2 B
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
0 X2 r2 d' W) b! p- i) F1 f# gOrientation
" D# u8 W6 R- U3 e--------------------------------------------------------------------
' b, g! ]* n- f9 f& j如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)5 i0 w$ N3 E+ W4 ]
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
( t: a5 c' ~! y; q0 J8 D我们要做的就是利用不同的方式将问题分解成3个容易点的问题:# t Y8 X7 m* C2 l/ B% i0 V" a
2 M! c$ y! R5 G/ G3 u1 `1) 先对应方向,我想要武器绕X轴旋转多少弧度?
. ]. }! g! u0 D6 G+ J- r0 @/ {2 H6 f S" I4 }2) 我想要武器绕Y轴旋转多少弧度?4 G# N5 W: ]! b" p
3) 我想要武器绕Z轴旋转多少弧度?2 c O( B1 D* b4 }, I0 |. Z- H- D, ~
8 G5 o6 f2 m6 _5 ^" U* A
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”( K' j' r7 w; H% [' Q) v
1 l5 i" k1 w& Q3 @& ^, R; T* Z
我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
+ |; n2 F s+ x& _0 c & N7 t3 [# Z, y: L4 k0 l9 v
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)0 g5 ~, V8 ~9 z( }3 a
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。
; u/ t `% u7 d8 `* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)
- Y: h: i+ [! ]* Theta W表示你想要绕Y轴旋转多少(例如,左右转)" w' X! u9 f$ D4 q
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚); a# W! q9 N' A0 o
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
' D* p7 u3 U* V% w0 w" u# q 按下列步骤得到你的取向矩阵:
% q0 S, }" c, X; }9 Q$ G $ Z4 @) G \6 Y: B9 ^6 _
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
# x8 m! e. a7 T2) 用{1, 0, 0}代替{u1; v1; w1}.$ E6 E" H& [/ E7 Y# V
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
! W2 ?" ~" g+ i9 q9 _2 k: T4) 用{0,1, 0}代替{u1; v1; w1}.6 p, H$ H- r" Q* j; F
5) 再解方程式,得到取向矩阵中间的三个数
. t" p2 ~# ~; B* q9 @6 p4) 用{0,0,1}代替{u1; v1; w1}2 w5 Q5 y6 d+ o
5) 再解方程式,得到取向矩阵的最后三个数
- X. k9 O! y8 |! z3 p6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
3 p6 h# @. d6 L# `) w& T ' G2 l2 K/ ~5 b' f- A& y
如果你有一些计算数学的程序进行计算,那将更好一些。
+ v/ q6 N4 ~2 v9 t& e 1 Q% O! }. T5 W) ?* U8 r ^
激活Hardpoint
) O, K3 @1 P1 \, S$ V) F-------------------------------
: h% h) y- P' D9 r上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
# s! M5 h: r- v: R" h7 \但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。( b+ n+ \& d" E2 v( u
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。6 A6 E% V7 u* Y
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。8 F! y( k! s7 z& ?5 M- n+ j
鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
% j2 U' q- {$ N# C$ ?/ ?记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 " F( [# a5 f5 k
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
' i ]9 w" H( ?; d) a0 ` s# h6 V参数如下. q& y. d1 `' a: l
Position
- h E/ }. D/ m0.0000004 ~6 F1 C4 D/ N. E
-1.116736
6 z p5 h+ h5 }0 s) m5 \- ?-4.163258
/ b h8 r" E8 T( L4 l) T+ }$ zAxis& X7 w; n( l) Q9 S! [6 Y6 ^
0.000000
0 k( x$ w# e' ?$ \+ K3 q1.000000
! v9 |' b$ l3 o% e% G1 [5 l0.0000000 z- ?% m( t0 m, j7 E/ w3 W5 j9 C0 C" A
max
- s3 r( F$ @7 l2 V6.283185
3 m! l, k |6 |# `) J, D" B, j0.000000
% y6 c* k+ f3 _& n7 E/ O" Q+ NMin* V. o' ^+ a z- z# `" m
-6.283185
0 s0 r A! \6 b0 `4 F& Z3 ?. |0.000000
$ U9 n" x8 _" R9 L0 Q3 m/ ?: q7 _' V自由旋转
' ~- a$ ^, y: @7 C; R- fOrientation* \# C1 g+ [/ a( F, I# `" u0 h5 F
-1.0000001 g; c% W# F7 e
0.000000" A7 ~: ^- n C0 \" C- [' ?
0.000000
0 ]3 \' D- K# Z% H; k! Q$ M# \5 }+ N0.000000
' | A5 L/ t1 X-1.000000
0 I/ s/ e: F( ]' y" V1 s2 l7 I0.0000004 E0 Z: @: l! d
0.0000005 K. ?/ S8 `& x& M
0.0000000 r8 p3 }/ y4 _) A9 x7 [
1.000000; |+ h( R* J2 F$ T0 ^. V$ X
枪位于飞船下方,指向前方 |
|