- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
" l% [1 ?5 e6 h: I$ ~
. L _+ S5 c. C. r- `/ l$ i[Orientation – 方向入门5 H$ q/ K7 Q: a3 q, ~' C+ `7 i
------------------------------------------ t. }( Y8 n- @. K) e4 n
: Q( O/ n: C/ b& t8 @9 U这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。5 ]* ~5 }2 B8 b: H$ \5 b" H
画一个武器坐标图
/ y( E: j! ^+ {4 JDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
9 S8 {3 O1 r3 D; {, Y7 \在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。6 n* U. j2 |: Q! c1 |+ q
, A' x* D5 s# A( Q. x' U# [9 S
例如:装在机身“上”方朝“前”的枪 + n, ?( @5 b1 ~. ?
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同0 _3 C9 m5 D7 K6 U, Y. p, n
头3个数是1,0,0
* A0 A) O4 u8 [' g, E $ j! S: O1 o8 Z4 @
*机身Y轴与枪的Y轴指向相同, c" y4 j, ~- C& ]* I" W. H' ~
中间三个数是0,1,0.
T& \" m7 p2 [( X7 ~0 A' Q: R*机身Z轴与枪的Z轴指向相同* |- l' k& _/ P% [* ?' V" L
后3个数是0,0,1.
6 `8 p' B. U; @根据上面的,枪的方向值如下:
9 P0 N3 |. T! Y" f1.000000; A% n) d" z, t4 ^
0.000000/ l7 |: `# H w; o
0.000000# |2 C6 N( e' ]2 D
0.000000
2 E% h6 C% \( X. ^; F1.0000000 _ }! V9 _* k( X
0.0000009 R& ^% ^/ m& v Y
0.000000
6 [; y$ c7 b- {+ a8 H) R0.000000
# L+ }: Z9 r: C9 U3 S1.000000: C" @8 v2 n! B; A; k
上面的对应方向是指武器的坐标系和机身的坐标系完全对应
( N; Z2 _' l2 T S
; ^, Z Z l* O2 r例子2:枪装在机身“右”侧,朝向“前”
8 U, V$ S) a6 ?: H! d*机身X轴指向与枪Y轴指向相同
, @. G( c, d( \1 l+ d 头3个数是0,1,0
5 D" b. s0 s2 A5 p9 c6 N4 E*机身Y轴与枪的X轴指向完全相反# b9 L7 }5 l. U- P; R
中间三个数是-1,0,0. # \; m: u2 i* h3 W
*机身Z轴与枪的Z轴指向相同
8 v3 s8 x4 z4 q) Q: ~$ O, g! q后3个数是0,0,1./ m- ?9 l; d) V, O2 T
根据上面的,枪的方向值如下:9 u: F# m0 L! z) u3 f5 t3 c
0.000000; ]3 S( p) b% @5 H2 G
1.0000009 a, y0 E J6 e6 F: T
0.000000
7 j% \* S! d1 d8 ^: J4 V. }-1.000000
0 T( q1 h- q, `+ a# G0.0000003 k7 k$ r; d0 E0 K
0.000000/ ^9 L2 k/ ~, d, }4 D
0.000000
5 y; E7 |( s9 |0.000000
) v8 f' \" C3 N- P' Y! _% K1.000000 % J k o6 J: W
例子3:炮塔安装在“下”面,朝向“后”面 & |" r y& U) u9 Y& z& h" C7 }
*机身X轴指向与炮塔X轴指向相同 , U) C2 ?# }# ?' e2 O& o
头3个数是1,0,0 8 d; a2 ?" M. |5 n3 T
*机身Y轴与炮塔的Y轴指向完全相反 ' l9 E/ q. U8 p7 B+ b/ } @
中间三个数是0,-1,0.( Q% ]4 G2 Q& }! u, D: l6 W
*机身Z轴与炮塔的Z轴指向完全相反- B7 _7 K) R" s% t
后3个数是0,0,-1.
3 o- w2 [1 C/ t2 V: T总结如下,炮塔的方向值如下:
' Y5 a% L W0 f: p5 ]1 ?1.000000
2 p4 M4 T4 O' E H0.000000
9 S4 J7 z% D Y* A; B6 [/ z- Z3 D0.000000& E2 r$ Z% M1 d8 l9 W5 T
0.000000
# W6 h1 H" \6 C* I% I, L* `0 A-1.0000007 c8 p( b' C$ I* g- {) B
0.000000& B* w8 o: I9 a5 Z! Q4 V
0.0000003 Q) `8 t0 @, j8 Q
0.000000+ h/ \% A& ?) e, K/ [
-1.000000 R# W5 x: _% S* {, f( k- e' x
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
0 P8 k* g6 H% U E J*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
" ^* f; g' O* p! q/ K$ V0 H9 m*机身Y轴指向在枪的坐标系y=-x的位置
4 v. `7 a( d3 q0 Y- o+ G: }中间三个数是-0.707107,0.707107,0
0 ?% t0 X( O% Q7 p0 y$ ?. @1 x, u*机身Z轴与炮塔的Z轴指向相同 1 q; L, l( q- ` x
后3个数是0,0,1.
$ |; M0 w% k7 M) ^" p0 R总结如下,炮塔的方向值如下:( l; K) ~# v+ I3 [
0.707107
& S& K5 z& P+ [( j1 d( U0.707107
1 T p; A7 Q6 x E0.000000
; d. T0 V X. C$ o4 \& B-0.707107
/ r4 I( G5 G4 O0 q) ~# S6 U0.707107
: z/ b) y/ d5 D& N2 \! U0.000000& _, O3 f+ r, @5 ^# D
0.0000000 J; a" s$ ?: M3 x( _
0.000000
8 w+ \+ N2 L( _) @% {1.0000005 |% |& G: T/ n0 V! P! j# }& F8 B
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。/ P8 U3 p ~$ z! r2 m
Orientation
7 D/ Z" v2 Q% {+ S' b# a. ^) L8 a4 B--------------------------------------------------------------------
7 F* i) V" t9 Z* S% @9 j如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)8 ~& T, i: Z$ U/ i7 P1 {
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
% G& I* s+ V* ~+ Y9 P我们要做的就是利用不同的方式将问题分解成3个容易点的问题:# x$ r9 z3 N- g9 L9 n: e- Y
' m& U2 g1 b9 Q8 f' w: x9 ] \1) 先对应方向,我想要武器绕X轴旋转多少弧度?0 F/ g9 O D1 O. C3 j
2) 我想要武器绕Y轴旋转多少弧度?
; a$ T. S; `: o5 P2 X& t+ c0 M# ]4 J3) 我想要武器绕Z轴旋转多少弧度?
" S5 ^/ N7 L0 v6 S- h! w 1 c% I$ f& E; H
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”2 k- t/ t: }. w4 t2 z
% E1 d l; n+ C3 H+ T9 M* [我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
; O3 j0 U* e6 S* R' u2 ]
& s! ?. n, S; n" j7 J2 d% Y+ G8 b* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
* G$ o( v5 L1 ~" u* B/ q) X* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。! _' d" }2 A$ u
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)4 g: a0 x* U% B+ S
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
8 `8 ?7 I% W2 ?/ e* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
/ K* g3 R6 O% d! K+ X$ M根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
9 f! M$ w9 Z* @/ Z 按下列步骤得到你的取向矩阵: {* o; A% w+ _4 a4 c" R
+ y e' q- z) s1 _" z
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
, l" I% B' C3 Q) o2) 用{1, 0, 0}代替{u1; v1; w1}.+ Q& B0 v+ ^5 x& j6 n, u [7 s
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数; `! S# G1 ?) Q/ O
4) 用{0,1, 0}代替{u1; v1; w1}.6 [; L X6 s) ]9 u
5) 再解方程式,得到取向矩阵中间的三个数5 N) T4 Z. b, m: a. R) l$ M
4) 用{0,0,1}代替{u1; v1; w1}
- Q6 ]3 ? f+ o0 o: P5) 再解方程式,得到取向矩阵的最后三个数
* ?1 G/ q9 E( t9 S& V6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
! I( K3 u! e: o7 _* _& Q2 a
: ~" Q) s/ n" T+ T5 @ L如果你有一些计算数学的程序进行计算,那将更好一些。
; \, k7 n$ @; D) R $ s' ]& T9 ]$ m! ^/ `2 b- o/ p
激活Hardpoint/ y T3 A* j: s6 I6 o+ b
-------------------------------
2 Q+ P3 a0 W; l1 I3 h- i上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。 y& \1 ~ \ N" ^" M' p
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。% m7 t6 s7 e; l' {" S
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。& X# B# E2 Z6 d+ @5 w+ D
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。# d& T0 c; l& \5 o- Y/ n8 U) ~( Y
鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
% Q: }( F' ~$ ]- J记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 $ w: Y0 R8 m$ P7 T z
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。( w* R7 Z# S+ k/ b
参数如下6 ?5 Q- ]5 e" C' ^ H
Position
, f5 g1 ?# B5 [( V( E# Q0.000000
M' o3 T9 d5 T3 G% d-1.116736
! d8 I, _, m- c$ _# O( ]9 b-4.163258$ T3 h/ e. Q6 S) V7 {5 g
Axis
# g$ @* q4 }/ a' f& y0.000000- ?4 ?: c3 E/ K: S, K" T
1.0000006 k, |3 L8 d% u+ b7 N2 ~" s
0.000000
$ ~0 }) m2 b# e, y) w r2 Hmax% @0 d. X! F6 E: s6 i) E
6.2831859 O+ v7 E9 I- ^
0.000000
: j. u) F d. N- g: x( m1 B, gMin
" B' e, A. s5 R% {-6.283185
+ M# t# ~ y" t0.000000; `% W! C/ z; I1 d0 x! `5 Y. D& y4 Z! s
自由旋转
( R( ^2 Z P9 }; t% G8 u) SOrientation2 A, C6 {6 I. |+ u/ p; b' |0 D
-1.000000. D9 s. i8 ?4 |$ I( C
0.0000008 _4 u9 m4 B* T: g
0.000000
% i7 n! ]/ A! U4 z: C0.000000* e$ C$ f; h7 o; a( p V
-1.000000& p/ j X* p H
0.0000000 ]- B$ |0 N( W3 J: u4 A6 m2 o
0.000000
# F$ w* B" e+ [0.000000
& \# \9 j7 ^9 R6 @9 E) _1.000000
$ ]( s4 r, \6 g) M) j. \$ f枪位于飞船下方,指向前方 |
|