- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 . y) K* v: e, o
9 h4 a6 u. m4 \
[Orientation – 方向入门9 w( ~ h% b3 L8 b' P( D
-----------------------------------------
& w6 @ O& S+ }" E- }, M( v8 v
2 r) P7 O0 _( J' s4 D这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。+ j3 M' N' L9 R3 \
画一个武器坐标图; g+ R3 \: n6 u, m6 s2 g% }; ~0 J
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.4 l) ?- y! m/ \& T3 p) W* |* @
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。3 x( F4 N+ C( C, F
$ E; V; i4 u: V1 \& u; A/ a* @$ `
例如:装在机身“上”方朝“前”的枪 $ @- B9 ^3 X& V
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
5 a: x( U; _* R, }头3个数是1,0,0; b! D; L% y+ j1 y& E
4 p; b3 G \: `4 P ^
*机身Y轴与枪的Y轴指向相同
9 H3 g) n- `5 }( r) X中间三个数是0,1,0.+ U& C* I& y; P7 b, p, d3 H, O
*机身Z轴与枪的Z轴指向相同# V$ Y' T( R- S* ~0 {
后3个数是0,0,1.
- ~# z+ l) ^' [0 p9 K# W1 y根据上面的,枪的方向值如下:
2 t( b8 o5 Q- k" c1.000000/ e v2 e! t N1 F* t4 _2 U
0.000000+ ^+ Z( x* F' [
0.000000
8 W7 {) n3 P; Q6 a" Z# Y0.000000% |. V* s% [7 |$ f& [9 @# S
1.000000* W1 e* e' Y D8 O0 | t0 r
0.000000% h; m* h8 G8 p2 ~1 [
0.000000- ]8 h! r C3 }7 p0 V: @
0.000000
, \( s s( y' n: g9 L, y# o3 ]1.000000
p& @& E) T3 h4 i. R4 z上面的对应方向是指武器的坐标系和机身的坐标系完全对应, ]9 q! w1 `) X4 i8 t
# b* O9 x- Y( U例子2:枪装在机身“右”侧,朝向“前”
0 V! o$ i' P. Q- c8 {*机身X轴指向与枪Y轴指向相同" s: z8 Z8 W2 r/ l4 F- ?% r
头3个数是0,1,03 _' W) e, P0 A( P3 \7 s! n3 Y/ V
*机身Y轴与枪的X轴指向完全相反
0 F9 n! B$ o3 m- f中间三个数是-1,0,0.
4 C3 D3 U* g; l2 D7 |" m/ U4 w*机身Z轴与枪的Z轴指向相同& h# Z& ^5 R$ ` K
后3个数是0,0,1.6 q: l4 ~8 D& [, d; x! a {
根据上面的,枪的方向值如下:4 S% I; N* _: M( U, ?
0.000000
7 Y) ^) s |- l1.000000
) H' m3 K0 m- Q1 ^& D0.000000# F, c5 R/ d( x" }4 s. x
-1.0000008 ?" C4 `9 h0 i4 ^6 H
0.000000& l4 ?6 j6 o0 ?9 `
0.000000
) A6 I. v, e$ K4 x7 q0.000000
7 j* R O- w) |8 ] I0.000000" M5 X" _4 A* P. f
1.000000 . p" X$ C% X( I! b
例子3:炮塔安装在“下”面,朝向“后”面
( ?- g' e, q2 {3 F8 u1 t0 Y% Z' y*机身X轴指向与炮塔X轴指向相同 j1 H/ | v8 ]! e1 ^1 a6 h
头3个数是1,0,0 5 u) g/ l! W T4 p. _
*机身Y轴与炮塔的Y轴指向完全相反 ' n3 w& R8 F" C+ { W% T
中间三个数是0,-1,0.
- K* O+ M* y- f, S8 ?6 X- K8 \$ S*机身Z轴与炮塔的Z轴指向完全相反, [$ p% }9 ^5 ~) ?: ]8 |4 O5 D% U
后3个数是0,0,-1.
! G# f' v2 }0 ~# w0 k3 V# g总结如下,炮塔的方向值如下:
5 f# x( I7 x4 h0 @/ z& x1.000000# O' N& P$ Z$ g; z1 ^8 q0 a
0.000000
$ Y* U( P( w7 o6 p! n6 C' q0.0000008 n/ g" E" E: D, ~) V% Z
0.0000007 f# X* N) M# z( T" V8 \
-1.000000' Q7 g( ?4 r& W# U7 z9 b8 q
0.000000. `2 C0 O+ Y1 t) J! C
0.000000' S6 O7 R; L2 E! x
0.000000 d; c/ K/ f9 ~
-1.000000& ]9 p' N; G1 D. b' N$ b% H8 S# D+ m2 {
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
, p* k6 [; o& y2 E" O/ }*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
8 s6 b8 U$ k$ g9 r*机身Y轴指向在枪的坐标系y=-x的位置
S2 Y# u6 n B. m$ K5 d中间三个数是-0.707107,0.707107,05 T1 i- h9 }1 ?) \
*机身Z轴与炮塔的Z轴指向相同 + n3 L" l" o: w* q) I8 Q8 K
后3个数是0,0,1.
% ?5 w/ k0 j& P! j; h" }# F总结如下,炮塔的方向值如下:; x5 f r! k3 c+ L0 w5 x
0.707107# E, H; M/ B, Y. j( G1 ?" k( ]- q" ]
0.707107
- N ~8 U' I7 J7 |. ^- M5 w0.000000" p/ T5 z: c. b. u
-0.707107
' E+ z' e( @) F4 F# _5 Z' G0.707107
' [1 B1 Z Q- `; Y% b7 G0.000000
8 S8 ] ]6 V ~; [- C& i0.000000
) t8 L. d0 S3 g( a$ S6 [4 h8 S3 R0.000000/ c* z: D# _% [8 K
1.000000
1 E0 C$ r) J' G; H如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。# J4 N4 y9 y% R5 c% R' d; V% U: Y
Orientation 1 H) z) K! W2 d5 j
--------------------------------------------------------------------3 M( H0 _3 ~8 w7 C& _& f K/ |6 s
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
1 p! t% D+ n0 K' p2 h1 w; k$ q在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。5 R1 ~2 y; P* {3 A% I9 s% M4 u& w; }
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
: t( ~ v% t" Z% l# X7 g- O
& @1 Y/ O: y6 m( ~2 T: U$ Z1) 先对应方向,我想要武器绕X轴旋转多少弧度?
8 f2 `7 \% I" h, o2 F2) 我想要武器绕Y轴旋转多少弧度?. H2 G( J+ o9 {
3) 我想要武器绕Z轴旋转多少弧度?
* Z" }* S3 D) T& A' b/ u1 q
9 v( w4 B# H, Q9 w( G/ h" q("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
& w/ Y7 s$ c: t( G) b' J
( J2 R3 P" o4 ~7 h* m我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:2 X+ }! B3 I0 f w/ q( Z3 ^7 M
) {% C2 Y6 [4 V' ?; G$ e" b* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
' l8 v( D4 K' F1 P# h* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。
+ D2 i' r3 M( ]3 Y8 s/ i: D3 {* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)
5 X( A1 T& m% B* [* Theta W表示你想要绕Y轴旋转多少(例如,左右转). }0 v* q J6 u: y2 {6 G5 \
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
: D7 _+ V0 p9 g. c Z" U根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
) s d; T2 H9 _/ W7 ^/ i( X& L 按下列步骤得到你的取向矩阵:- A. Z2 l+ Y! d4 c" k* `% ^* A
- t: c' k& D* t0 @! [
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
S _& ?7 ^1 s6 |$ k1 w4 q" `( i0 A# I2) 用{1, 0, 0}代替{u1; v1; w1}.
4 U9 s1 V4 ?) m j) V9 g9 J: c3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
' t& F& b5 t! u- {4) 用{0,1, 0}代替{u1; v1; w1}.: y9 H/ Z" D8 d
5) 再解方程式,得到取向矩阵中间的三个数
2 O' P- {! ?7 U/ P/ s' @* E4) 用{0,0,1}代替{u1; v1; w1}5 V+ \! s& ^! O+ o; }+ `4 R
5) 再解方程式,得到取向矩阵的最后三个数
" K, D/ _2 v- h3 w: y8 j6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
1 T. I& q1 s \5 @ 1 C: N: ? O {3 e2 G$ j
如果你有一些计算数学的程序进行计算,那将更好一些。; |8 i4 m- _, v% A6 s
8 A% v# I4 K7 [) r# z' @7 [激活Hardpoint4 H( t# B$ N! n _6 r
-------------------------------
# G* c+ N/ |4 T0 J: `1 j上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
2 S% ]2 U/ ?& @但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
7 A% n6 E: m7 k2 `# f. y如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。
* g; z! S# {7 j/ ]) @注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
% I6 _7 [. I5 D' m* m5 K鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。- J' P: E. A5 U
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
- y' n3 i6 U9 O% _$ |# Y1 D后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。& g' Z) r% g8 X
参数如下
2 B8 d$ P" h' A- l$ _+ S6 u! jPosition0 F: G: B( F) u8 C* y2 R( Q
0.000000( ]- @1 K9 s, f4 _1 K+ u# w
-1.116736
& _! @" X# z3 \6 a& _-4.163258/ n* E8 r% y7 j" ^: O
Axis
t8 c* X& x) g+ _0.000000
% j- A* e% i3 G1 ?9 d1.0000003 _" f1 L- F' W" _
0.000000
' |2 t/ `. k5 B4 z, \! ?) G( qmax: Y$ D; S! T- n- `1 {% P
6.283185
' p5 D( U% {( e: D0.000000
/ a4 g( F+ L5 \2 W' ZMin
+ B: u/ Y( Q6 v: M5 y; f-6.283185# t) U* l5 w( t" V
0.000000: G* Q- {* {7 S# d& _! K, @# z
自由旋转
5 m- f8 I9 G/ j5 |Orientation
5 l* ~1 D; U+ `# ^, X-1.000000
/ o5 {* S. \* e- H- g1 j0.000000: H8 |9 ]) J' o. x* J
0.0000000 I" l. G G z7 O$ e# x, v
0.000000
7 s+ U0 O2 W I+ C& I-1.000000
* A/ o& p+ O( l9 C8 ~ L0.000000
0 l8 P% p( y& I z# T0.000000
5 ~7 d4 T8 w, e5 F2 V0.0000003 w: u6 P8 r" }" B O1 q
1.000000; x$ ` n0 b; \1 ~% O4 U4 b! N
枪位于飞船下方,指向前方 |
|