- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑 $ j" n5 [- q$ f( H( a
. _$ B% k6 f' ~0 L' g4 w+ A
[Orientation – 方向入门
7 U P' P. e, U& e4 X( F-----------------------------------------
# {0 T: a L+ F( ]6 n; o7 |5 h) f ( j& I$ f4 n! h/ h
这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。* a( N# u; U3 j
画一个武器坐标图& T' m- m% w! j3 k+ n; O c
DRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.
8 Q2 {5 g8 h7 K在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。3 ~' }: e7 f0 b' X9 ?# n! o; r% ^
' k& Q' ^! t D0 B Y 例如:装在机身“上”方朝“前”的枪 # p$ v7 d7 O# T; c* l$ H3 _
*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同! b& Z( g0 Q- }% W6 Q8 l. T
头3个数是1,0,0
0 N; b7 R& v" A$ A- U+ @# V' } 0 K1 S4 f; H1 Y* {* b5 f
*机身Y轴与枪的Y轴指向相同
& \4 `& ^7 f8 |3 @6 |, p8 s中间三个数是0,1,0.
. s6 [% W9 k2 |% w9 U+ X*机身Z轴与枪的Z轴指向相同
; j2 {; Y/ Y, a. ]: Z后3个数是0,0,1.
5 v$ W2 B0 Y" N6 I/ d根据上面的,枪的方向值如下:* [9 ]3 x; N9 R" q, D6 U9 z1 Z
1.000000
' D8 p$ q% ^# O, S2 x0.0000001 b0 ], L# V( R, g
0.000000
, H% J l; w8 z0.000000
$ _: B' v& L8 p8 e1.000000
- x/ b/ @/ c$ f& a( K) T+ {0.0000003 I- R* e1 L6 ~0 r8 k& V
0.000000
. j& U. S2 q1 l: J0 ^0.000000
; S1 C! T3 l* e" k1.000000
3 h6 a! G. \- I+ l" F, n; e" F上面的对应方向是指武器的坐标系和机身的坐标系完全对应
, {0 Y0 a$ D% ^4 ` l' [
0 s; P; d, m3 F7 H8 R2 C0 ? J例子2:枪装在机身“右”侧,朝向“前”% H7 L+ T/ M- v0 Z+ k' Q$ ~
*机身X轴指向与枪Y轴指向相同8 p* u2 I* Y' X
头3个数是0,1,0
% x1 y& K3 ~ J5 t3 ? X6 v. u% s*机身Y轴与枪的X轴指向完全相反# F. M" s* k1 ?
中间三个数是-1,0,0. ! [1 E: Z E9 b4 A/ F3 i! T' H
*机身Z轴与枪的Z轴指向相同
3 q3 D; F, P3 H2 N& Y! B后3个数是0,0,1., `- Q; y% `: D7 {& D
根据上面的,枪的方向值如下:
% v/ W0 A" V' W" U+ S9 P# n0.000000
7 n7 M9 S2 }& z8 H% y' P/ p1.0000002 f- t' a6 y2 H
0.000000
1 V" m5 t4 a. c-1.000000
# G5 l& ^4 A. h. t& l0.000000
7 ~7 m# q% W- w1 ^) q* X4 f0.000000
/ }1 X" }. \! g/ y0.000000, c7 L% J2 r. V9 F+ o
0.000000! ^6 W# N, r9 m( e2 Z1 _+ c
1.000000 , T c7 o, h; _- x5 n) f
例子3:炮塔安装在“下”面,朝向“后”面 . r. O7 f. l' u$ D
*机身X轴指向与炮塔X轴指向相同
# R5 P O5 b% s" `& C8 q, U头3个数是1,0,0 / _, Z6 A9 k/ a6 }: O5 l! N
*机身Y轴与炮塔的Y轴指向完全相反
4 |: M; G- R! `中间三个数是0,-1,0.) @# {$ n' i/ q( }! y
*机身Z轴与炮塔的Z轴指向完全相反( k: ~7 Q1 `: S" q
后3个数是0,0,-1.
' ^5 V$ H3 m& r0 L总结如下,炮塔的方向值如下:
1 g' B$ `( O- L1 _" \8 @! E1.000000' u J8 t( x# R# |
0.000000
$ l# g* m0 o5 r* I/ y0.000000
6 B. J2 L5 ]. r& e- n: r0.0000007 p/ u% p: q$ n: T4 Y& `
-1.0000008 @9 w2 Y6 i1 w9 T
0.000000* B5 L& i& g7 x/ A( b* |0 b( ?
0.000000
3 I |! X( O) N* y0.000000
}! j- t& R# L. H, J& |3 W, H-1.000000
" |5 L. y8 [/ X& W例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)
! {2 l7 e& v0 R9 ]+ d6 N% k% H*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)2 }1 V# _5 J4 l7 ~
*机身Y轴指向在枪的坐标系y=-x的位置
+ p6 _- d4 D- t! Y中间三个数是-0.707107,0.707107,0
$ h# ?" D {0 }: b. j4 c1 k*机身Z轴与炮塔的Z轴指向相同 1 g- w6 s, W+ S! n7 Z. B2 Q K9 ]
后3个数是0,0,1.) v7 ~3 z# V* n! K7 X4 X* ?
总结如下,炮塔的方向值如下:% G& N0 w: E$ y z$ z) P+ ~( s3 X4 T
0.707107
1 V1 k- ]2 |& Q& A+ d0.707107
0 o8 E5 g" q" C" k* \0.000000( t& z8 a2 x: E; R6 y' J
-0.707107
; J9 D8 L* T6 T# n" e/ m9 K0.707107
& x' R4 @9 e* X: A; W9 Y) w0.000000* l2 ?! Q& x$ q4 Y, R% @5 C" ]
0.000000
$ O4 y8 e% }& Q! Q! T0.000000
! d0 K5 M8 _8 U1.000000+ |- l* p5 }9 a j1 v6 u* C
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。% F' F" p: R9 M
Orientation
. h4 b: }) H1 V9 }0 O* Z; k--------------------------------------------------------------------* a! z' J- k: C7 G7 x
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)4 Q+ a* J7 u# f4 O& ]- {4 C
在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。
}5 G# t6 ] ^8 A我们要做的就是利用不同的方式将问题分解成3个容易点的问题:
/ W: g( F2 j/ x4 h+ O2 _; [. V
! ~+ |0 Y- |' E/ J# f( K$ t3 E5 ?7 V1) 先对应方向,我想要武器绕X轴旋转多少弧度?
5 X3 Q3 D* T/ x! z. }+ w0 J' }2) 我想要武器绕Y轴旋转多少弧度?+ u# a A. L P, U6 W9 Z$ O
3) 我想要武器绕Z轴旋转多少弧度?* t4 {0 h4 S a6 H
0 `& \! p S, e" W9 f5 ~("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”$ B P- k h6 w1 C
( R( L% b5 }& S, a+ j5 q我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:4 w3 a6 g' t7 q. }9 |
7 |& K/ U7 E) b+ S, N! n: T* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
/ M; M# n! ]# g$ q+ m' r# S* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。1 k% N8 |) G+ x( r" O- P
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)7 d, l4 ]; h+ u8 \3 c) e3 ~
* Theta W表示你想要绕Y轴旋转多少(例如,左右转); m# v! m" V5 H% d; O9 G
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)6 X0 G# t* m& f! P
根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。. K4 Z! |: R, [* ?
按下列步骤得到你的取向矩阵:! a4 f0 J3 j# H: B" l/ _% }2 U
( n1 d% U) k8 P
1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.5 E% q& K: i( W! |- t+ T: |+ q8 F
2) 用{1, 0, 0}代替{u1; v1; w1}.: C3 K& w, b5 y! V
3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数
. e" l" K5 d! u0 J4) 用{0,1, 0}代替{u1; v1; w1}., l* U& w6 R4 p6 D( t* B/ ~: d* c
5) 再解方程式,得到取向矩阵中间的三个数
" L: H+ e1 G. O! S2 L4) 用{0,0,1}代替{u1; v1; w1}# }* w# Q' {' D! ~' f# d
5) 再解方程式,得到取向矩阵的最后三个数. A3 w# x! |! B/ j4 C! Q
6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.
" n; a+ N, k A8 O! F9 C- u
# h) I C; K3 ^& w如果你有一些计算数学的程序进行计算,那将更好一些。
* `4 c2 _* q9 Y% f1 g ! | A% e! D3 e6 u6 v+ @
激活Hardpoint
0 g. X0 B9 Y8 J+ A8 B& w5 F) p-------------------------------( [, C2 ~- S4 R3 I8 z6 m
上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。# t6 L5 }$ [. m- p
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。
5 I# v3 ]- ?7 ^2 Q& ] t2 ^# r: j, l如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。
1 }+ |$ ^3 l$ s X; ~注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。& u, x& l" z# F2 A9 ~+ t0 m' M/ l* S
鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
8 k5 f9 n0 O4 t记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 4 e8 Z+ s; X% h4 M' N0 c( O; k
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。
! l) b9 R8 K1 L6 }* @参数如下
9 L3 M8 T" d3 d5 gPosition
4 J3 o& t) @" ?0.000000
: I0 l# L. A4 n, L9 `" K1 O-1.1167368 P @. _0 W6 R
-4.163258: E3 T. @$ F' ]; [; F" r& t4 C
Axis1 X, C: m. {0 e1 p
0.000000
# x9 f) ^8 a* K- `5 A1.000000! y4 ]4 H/ B. @4 ?4 @ B3 R
0.000000
1 Q; T$ l3 z; Smax; @( p+ D; ]4 M8 \9 i( S
6.283185
! W3 _$ i! W. t& t6 }0.000000
q K3 \& t) ~0 k1 ^Min- u4 N) Q: N* p9 b# Q3 E) K
-6.2831851 ~& o% n! Z! Q8 N4 l) I5 E
0.000000& L- h" o; V- A3 W
自由旋转+ u0 l; n0 F. R, n J! | e
Orientation* \6 @/ g8 S J7 Q, Q4 \
-1.000000, @- _2 ]! k1 ]" e
0.000000
[1 ~5 i" j2 `$ H0.000000# r1 ] y: B5 m3 B) l1 B
0.000000
2 q' Q; g9 v/ u0 N# Y5 u-1.000000% e) q% f) |/ ^7 P: b, y
0.000000
3 G7 {. x$ Y( o& ~0.000000' j: G/ n- s5 \; q! l3 q, g, |# y
0.0000003 a1 c( L" p6 }7 v; J' ?) s
1.0000007 L# z/ l( d0 k) i$ V
枪位于飞船下方,指向前方 |
|