- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
' t: E* x j N
. l6 p' z0 Q/ P" [0 y[Orientation – 方向入门$ K8 I6 v- Y( |( ]- r# E% v
-----------------------------------------
8 \' Z! f! a" q+ K: F" F: ` . `; X. S% c y" M) k _
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。2 F' T& w# g: J `
画一个武器坐标图2 D% D# J/ ]0 ~& l6 h( o+ q
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.7 k7 |7 {: ~/ a9 O
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。- e) x l& ~" V$ r" f' A
. Q ~! G8 p" R4 J4 j0 t
例如:装在机身“上”方朝“前”的枪
7 ?7 z4 {" h4 N+ o*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
% g1 ~% C+ x% B2 Q" z& Y& g头3个数是1,0,0
k0 X2 z4 \( X: R, x$ k " m. Q) `2 |6 |' S. T, |4 ^
*机身Y轴与枪的Y轴指向相同9 [, q6 ~3 G1 W' Y4 d _) Y
中间三个数是0,1,0.
9 `. {! p9 z+ P*机身Z轴与枪的Z轴指向相同5 B0 [2 b( w# v0 T
后3个数是0,0,1. " J! @ j0 `4 q) X1 o: b/ z
根据上面的,枪的方向值如下:
, _1 K- n; S; }7 \0 V1.000000* {* ]/ W2 b* u$ P
0.000000
. z5 E9 d1 ?- J" T* l0.000000
& R+ j; G3 x2 {/ E1 {3 V0.000000% j% Z f0 t4 f M
1.0000003 I! L* u( j3 |8 J
0.000000
: U: E+ ~: h4 h7 q( f0.000000
! ?+ r# X8 `8 p# L: N, g) l6 M0.000000: V2 x+ s* x" ?7 G5 T; @/ ^0 |% Y
1.000000
n \5 Q- x! W上面的对应方向是指武器的坐标系和机身的坐标系完全对应
! _4 q x/ K5 u+ {4 t' k f4 {4 W. F: V
例子2:枪装在机身“右”侧,朝向“前”9 a) Y$ {# P- r1 m" B; G
*机身X轴指向与枪Y轴指向相同
; o0 {: H! m. `4 B0 P 头3个数是0,1,0
( X' h. N2 T1 h% M& B t*机身Y轴与枪的X轴指向完全相反8 o8 O. x+ e- d
中间三个数是-1,0,0.
3 d: [" V; o5 _*机身Z轴与枪的Z轴指向相同
) f0 q& P4 u3 t" C" S( _后3个数是0,0,1.7 t# B& _, q+ ^' N3 O; q+ J U
根据上面的,枪的方向值如下:* p6 V \6 @7 ]
0.000000
: _0 t* t* Q/ ~2 l* t- g0 j1.000000
5 b7 [5 f$ l1 p! f4 \0.000000
" J+ d& {( W9 B0 f1 o- j-1.000000
5 }; f( f' u! O1 z1 B5 H" D& g0.0000006 `# i4 i& |( b+ K& r* ]: \
0.000000% _( w4 `$ w3 c+ }# z
0.000000) ?6 S0 H Q) W5 y
0.000000
4 Y5 I( u7 P: r0 B7 y5 {# Y1.000000 5 W, X2 w' {$ b+ [# z8 c' K
例子3:炮塔安装在“下”面,朝向“后”面 & ~) b( s6 ?8 M% O1 }( O5 d D
*机身X轴指向与炮塔X轴指向相同 # Y; h. O4 c. ]; ^9 ~
头3个数是1,0,0 7 E: u2 C7 R! L8 z: F
*机身Y轴与炮塔的Y轴指向完全相反 % g8 V; a1 G/ Y0 \
中间三个数是0,-1,0.# l9 q$ M0 g* A
*机身Z轴与炮塔的Z轴指向完全相反% x! x$ T: q% k" l# C9 O2 u
后3个数是0,0,-1.3 o1 Y3 X4 Z% Q7 l8 P& @2 w: c- Z4 ~
总结如下,炮塔的方向值如下:9 W) X0 c7 M$ C) q$ a
1.000000! H$ }, S, E( U+ D0 n; A8 V
0.0000008 L( H) t Z1 x8 m) Z2 S. [6 i
0.000000
& I: b) |" G+ T( j' n' a8 b/ N! f0.000000' x g7 f2 {' m% P2 G7 y b: k5 X
-1.000000* j4 \) n9 G5 ]6 P5 ]
0.000000) A6 C, Y* L+ g# k( g
0.000000" j+ i4 x+ X, ]
0.000000
7 ]' N- x" C- @: I$ e4 X-1.000000
0 N# p; [5 m7 w例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
) n$ i# ~: e P1 K- P*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
# @3 Q9 A2 ]5 P# F$ P1 T*机身Y轴指向在枪的坐标系y=-x的位置 # b c) O, l/ w( A$ }# C6 E
中间三个数是-0.707107,0.707107,0: T2 E; k0 |0 _# z6 Y5 R
*机身Z轴与炮塔的Z轴指向相同 + Z) Q a, O3 `8 W* k
后3个数是0,0,1.* W0 \3 }( g$ e& q
总结如下,炮塔的方向值如下:9 c9 C; A* ]9 d. r' O, p/ k! p8 v, S
0.707107# g, L5 h6 h- J# m+ s- k
0.707107
6 k7 `* G) X* V* }3 X X2 }. Z0.0000000 y& Q" D! k; j( B; N
-0.707107: n& a) h& ?$ A; w. ?. l
0.707107
5 |/ h9 ~0 H: B+ O0 s7 E9 I' {0.0000006 ]4 a6 ^% A, ?- c- i5 ~4 o
0.000000
; ^) C D0 i# o- K9 Y+ {6 w0.000000
$ q" ~- b# V4 @( K3 z1.000000, c" l6 d% m; [* q7 ~! k
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。
7 _. T2 q' \5 L" {8 Q9 F/ P9 x/ C7 ROrientation
7 G, h( l4 A; ~& P4 {) `--------------------------------------------------------------------" C8 S) T3 T( W% F$ H' ^
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
5 E8 ^7 t3 f$ S$ y6 W在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。" u4 I/ K. e1 @' |& m$ `
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:) E9 }2 B4 [( K
, x, t; n' x+ B- H }9 ?1) 先对应方向,我想要武器绕X轴旋转多少弧度?
5 n2 C, O/ m) Y( i4 v4 ?2) 我想要武器绕Y轴旋转多少弧度?7 o( Q2 u; h( _ r2 Q
3) 我想要武器绕Z轴旋转多少弧度?
0 ~) F8 Q7 R2 U/ K + ~) O, s0 j7 p$ H: F
("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”' M+ r7 a8 z! p7 Q2 b: t
/ I& c; _7 W, i5 l+ U: B我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:) o* b% d2 |# P% q; ^
$ a2 U# n9 P# ]' D/ M: Z8 u* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)* H6 j5 D3 z1 j$ T2 l0 C; [
* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。! G& N" X) r, f
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)
2 }; V+ i" B Z: f% `7 V& S8 V* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
$ Z- Z! C, f4 }( ^) h5 O* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)* }; T# T8 A7 C% S
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
: {1 W, e* n& a$ I Z. K+ { 按下列步骤得到你的取向矩阵:. P( S3 F r7 R
4 D* P) d7 t# l( e! \3 i7 V8 e
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式. {8 h9 I# _: m* M+ l7 U9 S
2) 用{1, 0, 0}代替{u1; v1; w1}.9 C' p8 F* O( }: w+ {9 R
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
' g* T5 h9 ~( k. }. R: ^9 ?4) 用{0,1, 0}代替{u1; v1; w1}.
! G* h2 P& `" r" ]4 ~0 W1 w; B5) 再解方程式,得到取向矩阵中间的三个数
% a3 r }8 T, B8 {7 @& M; w$ ~4) 用{0,0,1}代替{u1; v1; w1}
7 v3 s, M: f& t/ y, t6 I5) 再解方程式,得到取向矩阵的最后三个数
3 U3 C+ P+ S- |; g6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
0 L+ s( e6 m' d' @6 @ 3 c, N$ \7 T) `9 k( F
如果你有一些计算数学的程序进行计算,那将更好一些。
9 d% E) Q) x8 d - }# i3 w8 o9 S7 i$ J9 v6 s e0 A
激活Hardpoint9 k( r5 P8 j* L3 s" F1 e \8 z0 m
-------------------------------; f `2 P+ B, }( N) P
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。
* b; E% m/ A/ U9 @3 q但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
' p& |- S7 ]. }如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。
) [$ m( L0 ?8 B* [- ?注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
C. f% D; `) w- [, |& A6 N! `& V$ D鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。! e" J% U- _ Y
记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 ' h8 ^6 d" o# b- T
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
G9 M1 U) @) }- h) J$ v2 c" z参数如下1 t: r2 z4 A9 E( U
Position
' j4 d/ n0 m. e2 m. _! }0.000000
* q& \! |0 V) ]% b-1.116736* L! r% A$ a6 K0 O3 R: u* [
-4.163258
0 Q! ~$ A/ H; W1 ~! r, u. KAxis
5 D' u7 n, q1 C6 H: c9 A4 z, b0.000000) q* t1 o4 t* a9 `' T. x
1.000000
3 E; i% d/ g3 Z! A: u/ ~! }0.000000
: y; S9 h5 ~" b0 t' Rmax
! g$ o( O2 n2 C2 g6 \2 |& a6.2831850 p, w, e: @9 f- E% }+ |
0.000000; Z4 U& N- o* A
Min& S& E( K; w( C8 d$ X% L
-6.2831856 l, l$ N( {7 X _0 Y7 p
0.000000
! T# g( P4 \+ S: y# p' _: H4 \9 ]自由旋转4 I, [& M; F+ `" o- g
Orientation" i- K" o& N3 m3 Z
-1.000000
, ^% C! E% X) i, k0.000000
* q" I3 R% Z7 O( `& H. z/ y0.0000000 G+ a c+ l1 C" X1 H. D5 D6 O
0.000000
6 ]4 S) S% F9 E7 e" o- W! J( I: L8 R-1.0000001 A' u! H- F9 P; H
0.000000
6 c M0 Y) ?8 _+ E( F/ ^# b, x' E6 Y4 _. j0.000000' r, u M( g) _+ [8 r% ~
0.000000+ J. A. I6 e' w" h
1.000000
) K2 R; q7 T4 Y9 [9 E枪位于飞船下方,指向前方 |
|