- UID
- 24042
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-13 22:46:45
|
显示全部楼层
本帖最后由 mzf3221176 于 2009-6-13 22:52 编辑
# g/ n9 n: ~& `, \4 ?' n4 G! D
: e) s( g8 K7 y+ w9 o% O7 |5 a! _[Orientation – 方向入门/ @# C6 }# N# h1 G2 i3 @8 H4 I; L
-----------------------------------------3 H3 m6 d( t9 U9 {- ?0 q
' I7 i' |; g, l# F7 A. S这部分很难,需要用到矢量。每一个可以安装的武器都有自己的坐标系,如果武器的坐标系和机身的坐标系完全对应,安装点朝下时武器的炮筒就会指向前方。
2 |9 L; s6 e3 F6 Y3 B画一个武器坐标图
' H5 J. \( }5 \6 cDRAW A SEPERATED DIAGRAM OF THE WEAPON AND ITS COORDINATE FRAME NOW.6 }6 Z+ M) L& ]7 `! b
在"Orientation"中机身坐标系与武器坐标系9个参数相对应(例如,描述每个机身坐标系的轴相对武器的坐标系的方向)。头3个数构成机身坐标系的X轴的3维向量,中间的3个数构成Y轴的,后3个数构成Z轴的(晕了吧。。。直接看例子好了)。
% R; Y# [2 v7 |$ n6 H! g$ v . ~& c! Z0 Y* }7 Z# u Y7 }
例如:装在机身“上”方朝“前”的枪
& J% g) F: R. |* o3 E*机身X轴指向与枪X轴指向相同Yw,Zw,Xw指枪坐标,X,Y,Z指机身坐标。后面相同1 c+ O0 p4 @! z ]" v2 u
头3个数是1,0,00 s5 H# W4 o( }' C
0 D) `0 P" |7 v: o*机身Y轴与枪的Y轴指向相同& _8 x/ C1 w7 S' T0 e q
中间三个数是0,1,0.
1 I4 Q+ R6 Q6 B/ N# w) f1 H*机身Z轴与枪的Z轴指向相同/ [* K" T8 y9 @/ C( v0 e% U
后3个数是0,0,1.
( X; T" r# U- R, d根据上面的,枪的方向值如下:, n; ?, b% |/ C
1.000000
% C) K; }# v# @# {0.0000001 f( n- F6 \# X D. @* n1 B' Z
0.000000
2 a" a' m" H4 l( v) I5 H8 V0.000000
9 y- }: `6 u$ |; Z7 f1.000000' b4 {: H4 _& T& r# |+ m
0.000000
2 P" R$ B% L1 H0.000000
0 q; t; e2 L% X9 y- S0.000000$ D# g" P6 E- z6 _
1.000000
1 g% U! {/ B# p0 `, B6 G! N1 \5 l上面的对应方向是指武器的坐标系和机身的坐标系完全对应% W. u8 y4 h) o- p: O- @9 G( Y
$ M" B; Q" ?# p5 o
例子2:枪装在机身“右”侧,朝向“前”
* d9 b/ }3 c5 S& X& B*机身X轴指向与枪Y轴指向相同
" R7 d3 @/ c, v4 Q9 R6 X' l' i 头3个数是0,1,0
; o' y$ X) U4 U2 _# V( A7 q- [*机身Y轴与枪的X轴指向完全相反
+ O5 L1 o. s- ^+ o4 a中间三个数是-1,0,0. # r; O+ }+ c9 F/ d: R) w9 z, d
*机身Z轴与枪的Z轴指向相同- {, D( v+ @! r8 k. y
后3个数是0,0,1.
, y: @- |( ~* @1 k. n0 o根据上面的,枪的方向值如下:
) K' T* Y" j0 d/ B5 n0.000000$ T4 m# I7 x+ S; R
1.000000
) j2 g/ Q- E: I& K* W0.000000
, l2 H% y* g/ g( d5 S' b0 \! V5 {-1.000000( g9 M* o# @. h& E4 L; `1 S: X
0.0000008 J2 ~1 F0 F0 ?
0.000000
/ B: s' n* X) I$ M$ d+ I/ W0.0000009 V! F0 b' T0 Q% i' b6 Y0 P
0.000000+ t6 B* r8 i! k7 Z$ C, {
1.000000 ( F! e5 c- C$ S2 w
例子3:炮塔安装在“下”面,朝向“后”面
: @: X. i% c% V& E0 z$ I. f/ L. d*机身X轴指向与炮塔X轴指向相同 6 K6 G8 ~1 _3 I/ I
头3个数是1,0,0 . e/ v* |9 q' f6 r/ [
*机身Y轴与炮塔的Y轴指向完全相反 + K) H! Q7 D1 g
中间三个数是0,-1,0.
2 I$ j- ^6 n% F: p*机身Z轴与炮塔的Z轴指向完全相反
0 K! B# i5 @* }1 D! v后3个数是0,0,-1.' n$ z# B% f9 O
总结如下,炮塔的方向值如下:& C1 L# G& C$ r. u' V6 P
1.0000004 v5 Z0 R: N B+ Z
0.000000% u" ^, }) {" B/ R
0.000000
; _2 R! U, D+ f4 ~ f( n0.000000! Q" P7 i" S2 o" F, d( y
-1.000000. M/ J( e d; z6 N6 G2 }: |, B
0.000000' X) M3 t8 X9 H+ u
0.000000
8 T; _) y1 D! g' [% H6 L0.0000001 k; s' Z! U/ |0 N6 v
-1.000000- E& F6 z5 @% f }9 A7 `
例子4:枪在机身“右”侧斜45°安装(就是绕Z轴逆时针转45°),朝向“前”面。采用矢量(斜边是1)! e2 y8 S J; @2 n, a4 w/ `) ?' @
*机身X轴指向在枪的坐标系y=x的位置 头3个数是0.707107,0.707107,0.(勾股定理0.707107^2 +0.707107^2=1^2,或者你也可以不用矢量法,直接采用1,1,0,但是45°以外的角度,你将很难表示)
2 D8 ~! h! L$ ]*机身Y轴指向在枪的坐标系y=-x的位置 4 \$ W$ q7 c0 |- N3 Q1 X
中间三个数是-0.707107,0.707107,03 \7 P9 N' d; H, y- \8 S
*机身Z轴与炮塔的Z轴指向相同 / G4 S9 g- b @, C4 T; H
后3个数是0,0,1.
7 i1 v# a8 ~1 }总结如下,炮塔的方向值如下:
1 e) E( X, w6 E. H, {: ?/ M! \0 c0.707107: Z+ s% D8 B. \% H
0.707107
1 ^! N+ ^ D/ {. k0.0000004 k9 f0 C* k$ J- _" J$ A8 K
-0.707107
; j/ O$ E9 y8 q- \: X5 k0.707107- c9 l K1 @& b! J- z
0.0000002 y( l3 `: I* D5 t8 u
0.000000
- E- I0 {8 e; }9 g/ ~0.0000002 Z4 f# c1 s$ K8 N
1.000000. O- D, U0 _& [$ X2 p% W8 {: v: ]) b
如果你扭曲了取向矩阵,你安装在新hardpoint的武器将有部分透明,并且妨碍飞行。2 f% ] K9 T$ t7 |
Orientation
% x! N- v8 H5 Z- p--------------------------------------------------------------------/ a1 @& N; X! l3 f
如果你试图在一些古怪的表面安装hardpoints,那弄清取向矩阵将会杀死你很多脑细胞(浪费啊。。。)
, ?6 \% t/ `, g" L在这个教程里,我们需要一点点数学解决我们的麻烦。首先你要知道怎么用矩阵乘法,或者用5分钟看看下面的,足够你入门了。/ A* S3 D7 V; M3 |7 `! S
我们要做的就是利用不同的方式将问题分解成3个容易点的问题:% L' a: _9 f1 c# Y
9 p3 L0 O. o8 i% B
1) 先对应方向,我想要武器绕X轴旋转多少弧度?
8 C$ ~7 V& J- X. p$ v4 L7 T2) 我想要武器绕Y轴旋转多少弧度?
- `3 g; v. Z& e" j+ W# z+ {) n2 b3) 我想要武器绕Z轴旋转多少弧度? P, d$ f+ s* f! u! S" V2 m
& T. a% w* p l! X, B% i5 @("对应方向": 回忆一下:如果武器的坐标系与机身的坐标系相对应,枪安装在朝“下”的安装点,枪筒将指向“前”! P0 K9 f/ d) I
% H( o5 Q! s4 U* o3 i) [
我们将用这个难看的规则三次,每次分别对X、Y、Z轴分别采用:
4 q7 p4 {9 ^7 i/ X: Z
) `) @: \9 l$ B @; q* d6 X9 n4 [* {u1;v1;w1} 是你将试图转换的机身坐标系的轴。Freelancer游戏引擎想要将三个轴都转换(因此采用9个参数) 。在本教程里,用3次规则,一次是为转换{1;0;0} (例如,X轴), 一次是为转换{0;1;0} (例如,Y轴), 一次是为转换{0;0;1} (例如,Z轴)
0 S. ?8 O6 X l- q" k; f0 L( @$ ]* {u;v;w} 是转换完的轴,这个轴构成取向矩阵的参数。; q. _6 `4 I$ Q& P
* PhiΦ(绕圆一周)表示你想要绕X轴旋转多少(例如,前后倾斜)# J4 F r2 L @. Y+ D
* Theta W表示你想要绕Y轴旋转多少(例如,左右转)% `3 a( ?0 c) Q! B7 r
* PsiΨ表示你想要绕Z轴旋转多少(例如,左右翻滚)
2 F& y+ V, l5 W3 n根据“右手定则”定义旋转是正,是负。伸出你的右拳,竖起拇指,如果你拇指指向轴的正方向,那么其他手指绕拇指的方向就是正方向。
) g5 p9 U7 Y- \, d/ s: b 按下列步骤得到你的取向矩阵:
- s6 c9 N3 t" k) z0 l, F* }
+ c5 R- T* V- z: E$ Z J! X4 p1) 弄清楚你想要的Phi, Theta, Psi值,带入下面的公式.
0 Q* p6 ]1 z0 M5 }/ ~2) 用{1, 0, 0}代替{u1; v1; w1}.
0 ~2 N! U$ s$ S$ d; n Z3 C3) 解方程式得到{u; v ;w}, 这就是取向矩阵的头3个数, o' t2 v8 c% E& X" P
4) 用{0,1, 0}代替{u1; v1; w1}.; o# o; |$ {8 x9 \) L: I. _0 @
5) 再解方程式,得到取向矩阵中间的三个数/ c* W: A# `3 Q! C1 ~
4) 用{0,0,1}代替{u1; v1; w1}
t2 i# Q; Z$ K5 E+ i& n; z5) 再解方程式,得到取向矩阵的最后三个数
5 C2 z5 g: j' c! ~/ z6) 将取向矩阵输入UTF editor,在游戏中测试。如果没有看到你想要的效果,重新进行步骤1.( F/ \2 G: k2 a1 g% I7 [* ^+ L" H9 W
! k- ?# {! ?9 E7 |6 x; D
如果你有一些计算数学的程序进行计算,那将更好一些。8 W. V3 C2 R0 V+ I9 Z8 E* Q$ h& S
# w1 A4 W# E- W; ^4 R
激活Hardpoint
$ l3 v! I) [6 m( y& W' r0 M-------------------------------
1 H! ]9 f8 k0 A' }% f1 {9 E上面已经将方向和新的hardpoint完全定义。下一步是使hardpoint可以在..\DATA\SHIPS\文件夹下的shiparch.ini中能够使用。, v2 ?# d9 b/ V% n3 |
但在这之前,查找一下你船的ID号。一旦你有ID号,利用BiniQDU打开shiparch .ini文件,并找到你的船(如果你以安装SDK,可以用记事本直接打开)。. Q7 Z: o3 y: ?( o% [$ C
如果你造了一个枪hardpoint ,找到以开头的行"hp_type = hp_gun_special_X, HpWeapon01, HpWeapon02, ...",并且在每一行后面增加你的新hardpoint 。6 B- N, x$ x; i2 @5 [
注意X表示枪的等级,如果你想要你的新的hardpoint 可以安装游戏里的所有枪,就要将它增加到10行。除非你修改的是Eagle, Titan or Sabre ,这些飞船默认配置等级10的枪及导弹,否则你需要为更高等级增加所缺的行。
Z9 q' f$ y: m" x u鱼雷/巡航破坏器,炮塔也一样"hp_type = hp_torpedo_special_X, ..." (鱼雷/巡航破坏器有两个等级) 和 "hp_type = hp_turret_special_X, ..." (等级10) 。
. V7 R) }" d5 e9 @记得保存你的工作。最后运行游戏,在你的新hardpoint上安装一个武器并看看它在哪,然后重新定义hardpoint的position。 0 d: q7 n! D$ G' t, D6 l
后续--我按上述对liberty的一架重型战斗机进行修改。在该飞船模型的头部的安装盘处增加了一个HpWeapon06的hardpoint。+ n1 f( }0 B# U3 }! U
参数如下
3 e" n+ [4 [+ g- E/ S3 K- o# mPosition/ A" H3 M% d w3 l5 A1 p, m0 ]
0.000000
g- s7 A @( ~9 E5 ?+ l-1.116736
' e0 P% Q# K( [6 a# T-4.163258
1 c# @& W; G- N# MAxis
# N: ?7 j& r& c) B7 j3 m0.000000; `4 S( A9 K4 i; ?
1.000000; i% @3 c! j; f( T) u
0.0000003 c) O$ T/ c0 D" c( U
max
6 M" \' Z4 n5 |% T5 d7 \4 J6.283185
a3 W" f$ j6 k* b; {- L0.000000% Q6 n H# X4 w/ @0 z
Min9 ]. k( g# |& c, ?( I0 `3 d
-6.283185. @& v i; }0 e+ [# T! E3 {
0.0000004 a7 C) Z" b- z: ~9 D2 e/ G
自由旋转: \4 {, A4 I) [6 }/ U" R
Orientation
6 v' Z* }6 W# u1 \7 L/ T-1.000000
4 k5 S5 W% Z- U" y% v0.000000* J/ A7 Z C0 w$ A
0.000000
% J" T/ b$ |( [7 {6 ]" C( f# e0.000000
- U$ X# R/ j! j8 |-1.000000/ L$ ^+ C9 B3 H) {' ?! |& f
0.000000
1 v$ a k1 ^2 X7 C4 F9 e0.000000+ k- ]) j9 v/ d2 w' z* @1 h6 p& d
0.0000000 c- ?: y7 W% a7 G( W
1.0000009 _+ _! \+ }* T' Z8 N' h
枪位于飞船下方,指向前方 |
|