- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 / q |; _! J3 s% J0 [# R' d2 k& N& S
5 H2 u. h0 ~, J
[Orientation – 方向入门/ K6 l) E, v$ v/ e9 ~! U. N( L
-----------------------------------------& M% I( I& x+ q) ~) J
" u; t4 E! j1 }3 q9 b8 ~这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
- ~+ T8 y& ^. o9 P画一个武器坐标图
$ K- r6 q4 J' I V! E. k) u% fDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
/ a' [5 w- Z( J在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。. a8 V$ Y; [* c* \' B; E7 D' u1 m
4 A. C# Z$ a2 E8 M. }! h" J
例如:装在机身“上”方朝“前”的枪
# b4 p! o" O# G*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同
' z; E( @8 o/ c4 k+ Z头3个数是1,0,0
' `1 ~3 Y5 P5 r$ k3 i ) m" M$ Y/ i$ f- D6 k- ^; G
*机身Y轴与枪的Y轴指向相同
& Z9 u. i, Q! z) e中间三个数是0,1,0.
8 D9 e0 e, o; g. {% H. F* Y5 c*机身Z轴与枪的Z轴指向相同
3 V. C/ g. ]4 L: L# n后3个数是0,0,1. , @! b! _8 X, K. d: b: S: n5 V
根据上面的,枪的方向值如下:
0 x! s {3 ]# @5 s/ t1.000000
" X) y/ t, D3 e0.000000
5 e* @ G' u( f0 q0 F* U0.000000
- W+ a4 t w! f. M0.000000( @8 p) s) J, g' @! ]
1.000000
4 d" B+ d# N! Y0 z0.000000, [: ]1 Y$ }7 N8 L v2 ?
0.0000008 s% L, l3 G, E4 o: j
0.000000
4 I! |; n9 W0 S5 v; N1.000000 h% O$ L* j1 b% w' ~/ q; C
上面的对应方向是指武器的坐标系和机身的坐标系完全对应
2 `, L: {5 ]% e' u5 `3 Y/ U/ a! h" R! I9 }- L1 E; d4 g
例子2:枪装在机身“右”侧,朝向“前”2 { G5 o$ g- Z _* c+ U+ Z( \
*机身X轴指向与枪Y轴指向相同) y b* _: j' p( Y: [) F
头3个数是0,1,05 W- W& q% n: z3 p9 |$ U) C
*机身Y轴与枪的X轴指向完全相反$ t8 w7 s) e$ M1 ^6 v8 B, _
中间三个数是-1,0,0. 0 Z- w8 v- [5 y
*机身Z轴与枪的Z轴指向相同
* t9 E6 O7 `/ U" ^" F+ d" {后3个数是0,0,1.
) {" h: D, c: ~根据上面的,枪的方向值如下:
: t1 ?- V. s% i) S3 B+ I7 Q$ x0.0000009 `) ?# L1 {5 G9 a" r1 _# ^
1.000000
3 g) d' X8 u% Z; g) H0.000000) g% a' h' E6 t
-1.0000000 ]0 z+ c ?9 G: ?+ K* K
0.000000
" w( @4 a( t+ W0.000000
& I8 c8 A i2 n* `7 b0.000000
2 U2 c* o4 I& s$ O. y0.000000. A8 X" w& Y, Y
1.000000 ! f( X, p$ C) r8 t2 k( }7 m
例子3:炮塔安装在“下”面,朝向“后”面
( j% `$ a+ L% o8 L5 I, c+ x*机身X轴指向与炮塔X轴指向相同
, ?( U1 T3 U- v9 r" M5 ~头3个数是1,0,0 * J# c3 Y8 A* Q
*机身Y轴与炮塔的Y轴指向完全相反 & u/ v0 F- ?( |& o/ I3 M
中间三个数是0,-1,0.* Y' b, F% P% |1 n' l/ [
*机身Z轴与炮塔的Z轴指向完全相反 T# M% @3 b7 e- e1 X) u& P
后3个数是0,0,-1.% B% s8 {9 M6 ]$ y( I0 P
总结如下,炮塔的方向值如下:
( Y: r$ H6 j2 O) t4 ?7 H1.000000" b& c8 r) D, a
0.000000
8 x2 q7 p" P4 [! z0.000000# L: d& C% w: s5 ^; b! F
0.000000$ y3 [, p. s# k8 ], n) c& h
-1.0000005 f+ T! l: F7 z/ n! s1 o$ e
0.000000
/ l% L. G) `9 S; ~1 s' ` ~3 N5 ]0.000000
' `4 w! ?$ H. D" N. I0.000000
. x0 K) N. y8 }; _-1.000000
* l) p* B% ]" E; ~例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)' q) w- G9 A: w! z
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)7 ?7 i5 K7 c! t; L; J0 i+ P
*机身Y轴指向在枪的坐标系y=-x的位置 ! z8 J; G! l7 H7 p2 v G# q! w
中间三个数是-0.707107,0.707107,0
: F# g% p- o f& [9 s*机身Z轴与炮塔的Z轴指向相同 2 ]& n4 b# A- h+ Y
后3个数是0,0,1.
7 B' a5 p: a/ C. l" B9 K F总结如下,炮塔的方向值如下:
5 _9 g$ U5 y+ W6 Q" h2 |' I0.707107
. v I( ~$ A: b# E* Z1 U% d" E0.707107
* \, V+ }" B9 h, u. q: Z0.000000& `7 }4 J& \) ~' W1 D R
-0.707107
7 k, ]( q' @' y! [: Y) ?0.7071076 r- O X! I& k. \$ O2 a* Y
0.0000005 l5 |* \% E+ h, ~
0.0000000 q5 M3 S: n& K4 \! L; g- |
0.000000
9 w0 n( T" S7 G3 f6 C- g5 T) k! F8 d! T1.0000001 v; X/ b; c- h4 z5 c6 w
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。: }$ z/ a9 n2 ?% X' x& {# B+ j
Orientation
8 C: \. @& H1 k/ Y" b--------------------------------------------------------------------% j/ [1 d" G, @* v; c6 \
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
% F# c0 H* D. x- t! c8 m在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
7 l5 O) N! ]: ^/ @我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
, S4 m& N0 O! I5 }4 R& S1 N1 S3 N x7 P( o: x5 F8 N( M' H2 |
1) 先对应方向,我想要武器绕X轴旋转多少弧度?
4 @8 B" s' T# A2) 我想要武器绕Y轴旋转多少弧度?. M3 j# n+ x2 f; t# i7 U' i
3) 我想要武器绕Z轴旋转多少弧度?/ l: s L% G0 {3 C2 a- _- c
8 F2 l5 W5 `8 H+ g' D) E("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”
' V2 n- O$ |8 _) R) I+ u
, t& D0 h# m0 E, \& p' S8 H; e我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
3 z2 P" @" h6 L' O4 G- o8 R & `- p% `, K5 O# ~- P: p% L5 l
* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
9 W! v& H4 D3 H. d* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。
/ K0 x. Y+ [$ O( f) N' C: ^* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)! ?' N; Z% D j2 m6 J! T
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)
8 ~( r" _2 \7 i& |6 n/ `$ [* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
* A( q9 ]7 S$ z! Q' f$ E! {, Y u根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。- {1 C3 l5 K- q/ S7 ^3 g
按下列步骤得到你的取向矩阵:8 D7 s- x7 i: p, ?
+ |# V" b+ z( l3 O1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
4 Y' a8 O6 W8 U7 e. ]! t5 o2) 用{1, 0, 0}代替{u1; v1; w1}.( ?1 E7 h+ _/ P
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
4 i6 o* G2 r/ B$ Y- [4) 用{0,1, 0}代替{u1; v1; w1}.+ h+ d* e4 R$ r: a3 a, w
5) 再解方程式,得到取向矩阵中间的三个数" X5 `/ N1 N7 Q$ h
4) 用{0,0,1}代替{u1; v1; w1}- h# E! @6 Y4 c( g9 T2 w
5) 再解方程式,得到取向矩阵的最后三个数
* {+ g- L7 k3 q$ S3 j" x! s: U a6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.0 x, b4 a1 \: D1 J
# J1 ]' }/ z2 z" J1 \0 O; s$ n# `如果你有一些计算数学的程序进行计算,那将更好一些。
% D9 E; r5 N# d; o S) Z* \$ | # c$ E x. f( S8 O5 H; f _/ Q. [2 X
激活Hardpoint
: _) p# c% ~# {& t-------------------------------
, q5 `8 d5 r6 S6 Y; V上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。, r! t" }/ `$ k6 F; O
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
( S, k0 P" a$ [ X% f如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。
% ~7 P# d2 ^0 H# W+ r5 V; [注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。! o2 e& T2 l1 X( Y4 L1 e, H
鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
& P, V* Y: Q: I- ~记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 9 \# b" c% P0 r( `
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。2 l7 a! p! [7 @+ R' z+ t( D8 y. E9 ]. V
参数如下9 e4 W* u1 p; f, g' k9 l
Position8 s2 i2 m' i- |2 M) Q* j
0.000000, `+ L1 H9 K x" p: X
-1.1167362 I4 \+ y$ B+ I8 v& F
-4.163258- J. T, z, J) f, m+ f
Axis
1 ^* c# `2 g# C6 ~4 S: d6 ?0.000000
4 W2 x) q" o4 S+ S- y1.0000005 l. [2 I4 @2 }7 n2 b
0.000000) c$ p/ o, i7 n# G
max
n \1 U/ w- _3 l' f0 U: x' F6.283185% Y. ] o$ v2 C
0.000000+ M5 X2 A+ X8 h9 {( R& _5 s! s9 P
Min* N, I5 {/ Z2 g& W! F' {
-6.283185
; r& u9 l% T8 l: D: H M/ q0.000000
; a" [, q" G$ p; _自由旋转' \% M$ T- j1 {3 O
Orientation
& N# q" a7 h# O; c7 n/ X-1.000000
& z9 w, r8 B) _0.000000; ]8 W6 C$ c V! |
0.000000! W' f" T4 o# ~6 H* h. E8 g
0.000000
3 c. R6 P( s7 G1 b* _8 N$ h-1.000000
3 x1 v5 h7 L; e0 x/ K; y0.000000+ k+ A0 m7 F+ n( C
0.000000
' B: f# U0 m% `- A$ F7 n0.000000
( A7 t( A$ E4 `7 S1.000000
3 ~8 ^& Y; u, ^% A. M枪位于飞船下方,指向前方 |
|