- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 3 t5 w9 {# }6 b
- Q) Y# v, c3 c
[Orientation – 方向入门& o6 W) F. ]4 o R' c
-----------------------------------------$ y h C6 p4 k( m
; u! v: E) [4 ^, ?( ?$ K; C) B这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
; @# L7 |$ b! ?2 |8 Z画一个武器坐标图0 [5 ` x/ L& u# ?: p; n
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
+ C: }5 u% P9 u+ J( Y' t" U在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。
! Z! _! @3 U5 {# u$ v# r6 S0 t
7 m& N/ |. \; c& w6 M9 ` 例如:装在机身“上”方朝“前”的枪 6 a5 I7 j+ O+ b M& d9 |4 I
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同: E+ H# r* [% k/ o7 A! G
头3个数是1,0,0, w. x3 J. s1 n0 `* e1 t& J# l
( Z$ ^9 o* Q4 y0 c! ]*机身Y轴与枪的Y轴指向相同
0 @: u6 m$ ~3 V2 R中间三个数是0,1,0.0 v" `" T5 s; S3 T) ^7 X
*机身Z轴与枪的Z轴指向相同
/ Y7 L$ m# H" H* G! M后3个数是0,0,1. ' `! Z3 [3 `. `( M4 ^8 g8 y
根据上面的,枪的方向值如下:
: h! ~1 i4 P6 K9 L5 Q! M: m4 M1.000000& }6 x3 ^ }# ]+ [6 F: G
0.000000
7 F+ M( |( x5 V4 u5 @+ f& _' C0.000000 s' L% L9 v% H: u
0.000000
& l: O9 d/ Z' F) P! K: Q, N1.000000
# `6 X& v: r* Q0.000000
+ t3 M; w; i3 _& y& V/ `0.000000
9 W; y7 i! u; x' U* Q( p0.000000
& \" M, n2 a9 g) x* e0 }1.000000
$ C5 C6 E7 Z' K6 A: g! f0 P( ?上面的对应方向是指武器的坐标系和机身的坐标系完全对应6 Q- X/ o4 A& ^' l+ h$ }
9 |. L$ u* f- @0 j. v
例子2:枪装在机身“右”侧,朝向“前”
9 _$ s2 j5 F2 f7 W& L2 \*机身X轴指向与枪Y轴指向相同
6 ?* U) E) p$ n- m; M+ ` 头3个数是0,1,0
6 s$ Y1 t H7 p! p0 y*机身Y轴与枪的X轴指向完全相反' a2 h/ F1 e& F* s
中间三个数是-1,0,0.
' y# |3 R0 U- J% Y2 t+ E*机身Z轴与枪的Z轴指向相同- w$ R! |# |/ p8 a+ ^& K
后3个数是0,0,1.- B# {# B7 o' z4 g) H
根据上面的,枪的方向值如下:3 u6 i8 N$ F/ g3 J
0.000000
2 c- Z8 C9 f! W4 a: f1.000000
- ^ w! y- J2 F$ W) R4 i. F# O* @0.000000
6 F' ~9 q0 ~. S8 M-1.000000
* O* m5 U5 J2 B& U1 j0.000000
! f& S7 Y0 I8 r/ \2 R0.000000
! e' U' l5 P8 D+ }6 C0.000000
# I$ t& u5 i$ v7 J: P% s; _0.000000+ \3 T* A7 n. R0 T* t
1.000000 , }' y/ A. ^6 e# O) g# j% }* `
例子3:炮塔安装在“下”面,朝向“后”面
: |5 q" H2 F) S*机身X轴指向与炮塔X轴指向相同
. a0 H! Y; s/ e2 p/ {& b头3个数是1,0,0
$ P) O% ^0 ~ J4 D2 C( o J3 E$ ^*机身Y轴与炮塔的Y轴指向完全相反 % C" p, l5 O( G/ C0 a0 R* {0 t% g% K
中间三个数是0,-1,0.( \! \* ]8 {- x
*机身Z轴与炮塔的Z轴指向完全相反" ^' t+ V" `& b; ]' D0 ?
后3个数是0,0,-1.0 q3 ]$ r4 k m. w. L
总结如下,炮塔的方向值如下:
4 S. a) S* q7 w" _1.000000. {+ e/ S$ l8 V0 Z- Q
0.000000' h/ M: Y6 O8 M+ k
0.000000/ v! ]9 W$ y+ N4 l- {
0.000000
: x+ B7 U: M M9 a1 ~/ o, d e. w-1.000000- I( K4 B+ U/ T; P' i3 r2 z
0.0000000 z# q( o8 H( J
0.000000
2 w3 K( F F# O K0.000000 M" L r8 A4 B* Q, J1 j
-1.000000, Y+ a" ^( ?! o6 Y/ F1 y4 H
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)* C8 m7 A' `8 [. _& E) [! b
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)# I5 z* Y9 p* o- b7 J( a
*机身Y轴指向在枪的坐标系y=-x的位置 & V" q' T" D0 ^( C3 w6 I) ^, G$ x
中间三个数是-0.707107,0.707107,0
" T- J3 e; x. n3 [ o, z! k8 F*机身Z轴与炮塔的Z轴指向相同
) i. x4 L, ^6 i" i7 r% I3 o. V后3个数是0,0,1.
4 T- T- _* J" _总结如下,炮塔的方向值如下:
' m/ {2 o. A$ l4 O1 x0.707107+ z) @$ u4 `/ [" g7 g h
0.707107
E! J8 j( N* b0.0000000 Z) F/ n, T0 \3 I; _
-0.707107
9 Q! v# m$ u9 ^% ~% v/ C! D9 Y0.707107
) N2 T G5 A0 b* Z7 s% Q5 x0.000000( Y# a7 Q: n5 F1 U6 f: f
0.000000
. n, w F" c+ k, P0.000000; o4 k9 D7 W9 b" l$ i0 h2 y
1.0000002 Z8 k6 x2 \ c# F& Z
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。3 r. R0 x+ K5 s- X% G
Orientation 6 r" N- z+ S k, }3 L# G
--------------------------------------------------------------------
! _- a# I( M: H# I1 W; U! \& i如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)- z2 d# X6 N. T. e4 O8 l) W
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。1 {8 G6 b! }- U! B6 F3 n2 y! M
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:; n8 C- V, G: D
" A, J- E7 w8 J1) 先对应方向,我想要武器绕X轴旋转多少弧度?4 I7 ?. K% u5 ?/ J/ T, Z+ x" h
2) 我想要武器绕Y轴旋转多少弧度?
5 S: D; _& Q( W0 ]) Q! W1 `3) 我想要武器绕Z轴旋转多少弧度?
$ Q" T6 e5 u; z& K. Y/ C8 t
& p5 \1 B4 i' q("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”, m8 i- d+ ]- j9 S0 g, m
9 L J" ]. x8 N我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:9 T: M; y4 ^$ T% k1 t2 ?. V: s
# Y/ J& p6 P4 x, q
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)" J6 j" h0 s8 |, L7 X
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。
) [ v# t7 U1 t2 V* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)& t& l& g$ A4 ?) p& b4 N- s
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
2 o, F' w: ]9 _8 i4 ]* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
: B. B3 A3 X9 @% A# G! h根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。& Z5 S- e8 v; C9 w6 X
按下列步骤得到你的取向矩阵:
% {, p5 _' g6 [0 G& @; e. x0 y
$ ~3 ]2 r4 {6 h' @" g, t: c# [1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
; P/ \ o2 w5 e5 v6 p2) 用{1, 0, 0}代替{u1; v1; w1}." F0 B0 m$ Y8 E9 h) m3 Y1 Y- h
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
- K) t/ y$ g( w$ I4) 用{0,1, 0}代替{u1; v1; w1}.
' m! z7 ~9 Y6 z! _5) 再解方程式,得到取向矩阵中间的三个数
" K4 B& S3 N/ }* X* P, V3 r4) 用{0,0,1}代替{u1; v1; w1}
& s9 A6 }* l- ^( o5) 再解方程式,得到取向矩阵的最后三个数, m% Y8 Q4 T/ H/ l& G
6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.& A( X: L, U- d/ J& j
4 a5 N# Z% t+ q/ b- ~0 m6 R; s如果你有一些计算数学的程序进行计算,那将更好一些。
+ U& ]& D+ \9 ~0 f' ~0 p4 m6 `
5 @9 r( E/ x0 @6 E+ V2 o) V8 b激活Hardpoint8 u5 t% s6 |1 d: @9 s3 h
-------------------------------
% ^; a- W2 c5 z, O7 J- @7 ]! B6 j上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
" A/ c, j8 j, `但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。2 [# D: \! M+ s0 T/ P8 Q# d& R
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。& e1 a1 G, A# S8 j" I. l% t
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
: P+ ^8 @- Q, v4 U$ ?鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
# T& N- _8 s6 s8 V& ?0 Z0 A记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
4 I0 ?5 N! G5 n# g后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
, A, i. A3 x' O, j% v: M( h" U参数如下
1 _1 K" I/ Q, i- [3 ~! zPosition
3 E9 b: _% {/ f' C0.000000
& j8 X6 i: X9 Q/ P: n-1.116736
8 m8 t& x, `( |-4.163258
, [9 [/ p* w: X' {$ [0 q' n6 TAxis* S* m8 Q( b0 \6 W v0 R
0.0000008 \$ j Y( \% ~+ e/ {/ L
1.0000009 f: N' H% }# c$ L
0.000000
& e& ~4 G) Q! l' Qmax, ?, M8 B- P- t
6.2831852 _' t& G( F* F. a7 C* D; g8 E
0.000000
! x5 m, r0 ?' E7 Y5 }Min
: U' R5 [# J; T: e5 a# S-6.2831853 T7 l* a/ W# D& @( H) }" X
0.000000
3 @2 L- E. ^1 [6 a/ O自由旋转
; c+ o' g- ^$ I' JOrientation+ Q9 Q' K' Y+ k t) }
-1.000000
1 t* p$ ?3 d# k1 g: [/ s) a5 I, a0.000000) N6 {5 T5 v( F1 ]" v: ~ b
0.000000
, Q! ~: J3 C; Q3 r4 ]/ w7 i; N: O" n0.000000/ j' o# q& c- A: f) W q
-1.000000% s. b2 K; {0 R9 K {1 w
0.000000
4 p3 T x0 x/ l8 f# D# I% h0 Z0.000000' x- }9 T1 i$ n2 z
0.000000
1 s3 R+ o' ?8 n9 h" C2 O1.000000! C* R7 i S# ~
枪位于飞船下方,指向前方 |
|