考慮到在應(yīng)用中有好幾個(gè)坐標(biāo)系統(tǒng)比如opengl,3dx,當(dāng)然用戶(hù)也可能有自己的坐標(biāo)系統(tǒng)
考慮如此,我覺(jué)得還是把引擎的坐標(biāo)系統(tǒng)不要局限于特定的一個(gè)坐標(biāo)系
這是我寫(xiě)的引擎坐標(biāo)系統(tǒng)如下:
1 ///////////////////////////////////////////////////////////
2 /// 頭文件包含
3 ///////////////////////////////////////////////////////////
4
5 namespace core
6 {
7
8 ////////////////////////////////////////////////////////////
9 /// 坐標(biāo)軸枚舉
10 ////////////////////////////////////////////////////////////
11 enum AXIS_TYPE
12 {
13 AXIS_X = 1;
14 AXIS_Y = 1 << 2;
15 AXIS_Z = 1 << 4;
16 };
17
18 ////////////////////////////////////////////////////////////
19 /// 坐標(biāo)軸方向枚舉
20 ////////////////////////////////////////////////////////////
21 enum AXIS_DIRECTION
22 {
23 AXIS_DIRECTION_UP = 1,
24 AXIS_DIRECTION_DOWN = -1
25 };
26
27 ////////////////////////////////////////////////////////////
28 /// 定義引擎坐標(biāo)系統(tǒng)
29 ////////////////////////////////////////////////////////////
30 ////////////////////////////////////////////////////////////
31 /// 引擎的坐標(biāo)系統(tǒng)定義如下:
32 /// 以指向屏幕右方的坐標(biāo)軸為第一坐標(biāo)軸(1)
33 /// 以指向屏幕下方的坐標(biāo)軸為第二坐標(biāo)軸(2)
34 /// 以垂直屏幕向外的坐標(biāo)系統(tǒng)為第三坐標(biāo)軸(3)
35 /// 以方向相反的坐標(biāo)軸其方向?yàn)樨?fù)(-1)
36 ////////////////////////////////////////////////////////////
37 struct CoordinateSystem
38 {
39 CoordinateSystem()
40 {
41 type[0] = AXIS_X;
42 type[1] = AXIS_Y;
43 type[2] = AXIS_Z;
44 dir[0] = dir[1] = dir[2] = AXIS_DIRECTION_UP
45 }
46
47 CoordinateSystem(AXIS_TYPE type1, AXIS_DIRECTION dir1,
48 AXIS_TYPE type2, AXIS_DIRECTION dir2,
49 AXIS_TYPE type3, AXIS_DIRECTION dir3)
50 {
51 //! 必須保證參數(shù)坐標(biāo)軸的合法性
52 ASSERT(type1 + type2 + type3 == 13);
53
54 type[0] = type1;
55 type[1] = type2;
56 type[2] = type3;
57 dir[0] = dir1;
58 dir[1] = dir2;
59 dir[2] = dir3;
60 }
61
62 AXIS_TYPE type[3];
63 AXIS_DIRECTION dir[3];
64 };
65
66 }
67
68 #define COORDINATE_ENGINE core::CoordinateSystem(AXIS_X,1,AXIS_Y, 1,AXIS_Z, 1)
69 #define COORDINATE_OPENGL core::CoordinateSystem(AXIS_X,1,AXIS_Y,-1,AXIS_Z, 1)
70 #define COORDINATE_3DMAX core::CoordinateSystem(AXIS_X,1,AXIS_Z,-1,AXIS_Y,-1)
首先給坐標(biāo)系統(tǒng)排一個(gè)次序,然后定義正向的坐標(biāo)軸方向,然后就可以抽象出萬(wàn)能的直角坐標(biāo)系統(tǒng)了
當(dāng)然為了方便起見(jiàn)這里給定了3個(gè)常見(jiàn)的坐標(biāo)系統(tǒng)分別為引擎坐標(biāo)系,OPENGL坐標(biāo)系統(tǒng)和3dmax坐標(biāo)系統(tǒng)