- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 * @6 r) k% p/ g- r: \
- e! g; K/ J3 a# i
[Orientation – 方向入门
7 J5 M+ ]% |2 i% w6 b-----------------------------------------* ], n" l1 ?' c9 u
. i; F' q$ [/ l( O: l5 u
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
2 P7 d' O+ l' M" K' v4 I9 K画一个武器坐标图% w* V- `, h1 U8 H) u" G
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.* Z/ m9 X9 b* m; i
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。3 V! ?9 F) Y4 j
3 L# g+ e+ o7 m1 i/ g5 @3 I2 O 例如:装在机身“上”方朝“前”的枪
7 G- F# c$ S4 X$ v*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
7 @$ H- v) J4 @6 D- `3 w头3个数是1,0,0/ q* s( Y' `& S' } A% z P2 D
1 S" @4 x: k# b5 ]*机身Y轴与枪的Y轴指向相同
# A) @$ s( |- @; d中间三个数是0,1,0.% l& ]2 h* @, v% I. _9 j' h9 Y
*机身Z轴与枪的Z轴指向相同
C4 L: ]8 y, b/ k n; G后3个数是0,0,1.
7 o8 f, ~$ K! ]0 T根据上面的,枪的方向值如下:
% Q+ ~. X! ` n4 ~1.0000006 j" G$ |2 A6 x" v6 F) o' E; l4 s
0.0000007 b- d" {1 U- j, ^5 B9 n/ a
0.000000& [% W- ^" U; I
0.000000' L: w+ f% o8 O. M. G% u( L* C
1.000000# e( J$ W8 t4 E7 D
0.000000
6 j/ G8 e# S/ _" i% i0.000000& g6 ?* R( ~" o
0.000000
# [% z6 k! g' _" t4 R1.000000$ t# \; o. k* x
上面的对应方向是指武器的坐标系和机身的坐标系完全对应& P5 F2 U+ T6 h! t. N- T4 f. r+ k
5 p) N( j. B* P, Q8 r例子2:枪装在机身“右”侧,朝向“前”, H) p4 E8 Q4 @# M
*机身X轴指向与枪Y轴指向相同
M/ E+ V2 e4 {% z( F 头3个数是0,1,0" [4 ?( A- ^) X% V& k! N
*机身Y轴与枪的X轴指向完全相反' o/ n+ ^# l9 r
中间三个数是-1,0,0.
/ f6 x9 e- ?" `' s*机身Z轴与枪的Z轴指向相同% t2 E9 w0 j$ m' i6 E, X. g
后3个数是0,0,1.
5 J# W- q, H# p* I! a根据上面的,枪的方向值如下:" l! B* i, m% ]( ?3 s1 e
0.000000
% }- B3 D0 g6 v* T# e8 K+ K8 [# t1.000000. Q# g+ j8 N8 F# W6 }3 W5 h
0.000000, `8 ` D* x, U$ i+ @8 y x f+ Y) K
-1.000000
) s* L/ j' {1 m% S' u8 R0.000000
6 F3 U3 H6 I( n5 [; k0.000000
" R! U1 Y {$ T Q0.000000
/ S4 o4 x9 `( g% {9 s9 m* A0.000000+ a O2 ~ d, S, W
1.000000 6 V& o" m! T# z$ m2 ^ p
例子3:炮塔安装在“下”面,朝向“后”面
$ o6 p7 T4 g' m+ ^% N9 K) R*机身X轴指向与炮塔X轴指向相同 $ m& a# x' S" A5 o) c
头3个数是1,0,0 7 n) h4 t: U7 o: a2 P" M2 r
*机身Y轴与炮塔的Y轴指向完全相反 . r' }6 O" `0 z% S( \
中间三个数是0,-1,0.
e6 t& t2 }1 u5 _$ F*机身Z轴与炮塔的Z轴指向完全相反
& ^) {( N2 f1 ~% R后3个数是0,0,-1.) f2 u/ h. D0 t- l/ B; ?
总结如下,炮塔的方向值如下:
% q. c2 C# m. L" a1.0000006 @7 r3 | h4 v( B! t8 C: ]
0.000000
8 N4 s6 o& l$ X0.000000" ]/ `" T6 C1 j" U- W
0.000000
' E5 w! b& J$ b+ j-1.000000 z# n1 E& k) ?% z6 ?1 r
0.000000
" }. B q8 }+ z% \/ y M) n) ~0.000000; I/ J) H- X4 h: R6 [# X
0.000000
`2 T" t# c" c o5 e, L-1.000000
! Z8 T- R' `& @1 R, l# U7 L例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
' N* T; w+ I! L0 O, d( v- F2 l- z*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示): I% R; N' A- T6 ~- X" b9 V
*机身Y轴指向在枪的坐标系y=-x的位置 % b) V P. F* z6 A' n- c
中间三个数是-0.707107,0.707107,0
' q- Q' N/ _8 G9 h; b" Y$ S*机身Z轴与炮塔的Z轴指向相同
9 d1 M3 D6 F+ u+ Y5 i后3个数是0,0,1.& Z* \9 w. |0 L9 y2 L0 q
总结如下,炮塔的方向值如下:+ }- `4 M. O6 K3 Q
0.707107$ y2 ~! `% B4 O! v/ @9 n
0.707107
, N# K; c' \) j3 N# ]: g0.000000/ L8 _; L4 d7 t( c5 M
-0.707107
G& \6 J. P6 l0.707107
4 T9 @6 E/ E2 ]( u' x0.000000" \+ ]6 ^* y- n% `" d1 L3 o" I
0.000000
+ K* S; P/ v& ? Y- }0.000000; |! N8 h+ E' N6 j* \9 ]) L
1.000000
* R5 S8 H; Q, A% T& t- V如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
F0 j7 b8 u, ~* [Orientation 3 x2 ~( Y; Z9 j ]" o+ W, {
--------------------------------------------------------------------
. I1 @2 I: u& r如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)2 y6 x) H5 L6 m% J, T3 ^$ \
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
+ I4 _& m% F, }$ q+ K( s8 j我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
7 h" l; S& v& ]+ G& `. g, a) L + b) z( A, z- W7 |, i
1) 先对应方向,我想要武器绕X轴旋转多少弧度? v! q( O {. T& Q; h6 a
2) 我想要武器绕Y轴旋转多少弧度?
! v3 d" h) m- D3) 我想要武器绕Z轴旋转多少弧度?3 I" a, F0 y: j. o
7 Z# o9 b1 P( p6 `! |" b9 j/ r("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”4 o( j8 k9 M$ l, a
( p+ @2 |+ x- |/ \5 K% y
我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:& x- \. Q, { u/ k! t- Z0 ]* z5 `
! i, `, _/ l' S2 V# a* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
0 D u) Q) L% U$ ?3 ?* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。+ p& H" i5 X& G7 V S! n9 c1 g8 r
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜) j4 b" }/ O4 r; u5 X! C+ r
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)& T' h$ i) C( C% z/ }
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)3 d% A% |$ t# o6 U9 ~9 ~" V# W1 f
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
E% R# V5 P" Q& |( b: ? 按下列步骤得到你的取向矩阵:- F& G# w- Z4 m0 x1 V, h# Q
# b/ _' K3 F. |# w/ z, I1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.( R$ w F) F A7 P) S! l2 Z
2) 用{1, 0, 0}代替{u1; v1; w1}.
& X3 X' }8 y' w' A- u6 V3 x8 ^3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数3 o/ r- C) `6 X: j: N
4) 用{0,1, 0}代替{u1; v1; w1}.# v, v: |7 g, B% G
5) 再解方程式,得到取向矩阵中间的三个数
, ^7 o/ Y/ ]0 z7 j" i6 |( F- I, e4) 用{0,0,1}代替{u1; v1; w1}# l( |5 C+ u3 \
5) 再解方程式,得到取向矩阵的最后三个数
, I4 W% j; _4 a9 I9 r! t" p1 Q M- P6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
$ Z, R% V! b s1 w7 ]2 X& d5 ^" `" M$ b/ q
/ i# L; \4 {% b. i1 L# }- Z. P如果你有一些计算数学的程序进行计算,那将更好一些。
2 M Y- j2 C* x$ c
- \9 I* C% J/ ?6 \, F6 T6 S6 a+ y: k激活Hardpoint
$ y6 \+ [& _; b9 u! H-------------------------------" `: g9 K; F2 x S
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
. F/ n) n/ t* i$ }6 P1 x5 U; w但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
' Q" v9 [9 x5 s: W; v如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。( h# D3 Y* s! `3 n6 e1 b; A. i
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
: Y# l3 L9 W, f1 \鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。& S# ^& Q' H% a/ M% F3 b
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。
/ k6 r/ U3 S- y后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。, b: c' T# ~9 I0 K9 D% w
参数如下
6 ]; I8 m5 @# w: |: K/ CPosition
0 X1 Z8 h, G0 a# L* v0.000000
6 G! W8 y: h0 u+ O4 n-1.116736
) S; @( V( V: [( i3 V-4.163258
* d; g4 t* s. [6 h2 `9 XAxis& V: s8 ]; z0 U8 [
0.000000
. [. n8 N; Y9 L+ E+ a+ p) @1.000000( e( E7 @* {, u. L1 b6 A
0.000000' U7 u& j' c8 t9 @+ _9 f
max- {2 z- u* o" ?- \
6.283185
5 N2 K& W4 y0 e" R* C$ P3 D0 o0.000000$ v1 U5 Z. x( ^, `% A5 j
Min
2 ]1 N2 K, n. {5 u- w5 u, d-6.283185
& t0 S8 U! }' l* ^* [0.0000008 n5 J* w. a) R, Z, o# G: ~
自由旋转
* A/ g# J6 f h6 a8 c% kOrientation
' i% J& l4 Y+ ]# B Z$ W* H( [5 z-1.0000006 q$ t) Z2 X j# C7 D! f$ [
0.000000( F+ M# c W8 o5 {3 C3 J
0.000000
2 V/ x& L' \1 {$ V" i0.000000
! |" z! Q4 O8 j4 r4 T6 _; c9 q2 {-1.000000
. E) T0 S7 f2 ]3 \0.000000
. r4 ^* `6 r! ~' Z# s- k0.000000. ?7 n4 D, K5 [+ K- e4 s+ p
0.000000: l+ i; I0 X/ ?8 C
1.000000
% o, h4 F0 q* m; P枪位于飞船下方,指向前方 |
|