Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
考虑到在应用中有好几个坐标系统比如opengl,3dx,当然用户也可能有自己的坐标系统
考虑如此,我觉得还是把引擎的坐标系统不要局限于特定的一个坐标系
这是我写的引擎坐标系统如下:
 1 ///////////////////////////////////////////////////////////
 2 /// 头文件包含
 3 ///////////////////////////////////////////////////////////
 4 
 5 namespace core
 6 {
 7 
 8 ////////////////////////////////////////////////////////////
 9 /// 坐标轴枚举
10 //////////////////////////////////////////////////////////// 
11 enum AXIS_TYPE
12 {
13     AXIS_X = 1;
14     AXIS_Y = 1 << 2;
15     AXIS_Z = 1 << 4
16 };
17 
18 ////////////////////////////////////////////////////////////
19 /// 坐标轴方向枚举
20 //////////////////////////////////////////////////////////// 
21 enum AXIS_DIRECTION
22 {
23     AXIS_DIRECTION_UP   = 1,
24     AXIS_DIRECTION_DOWN = -1
25 };
26 
27 ////////////////////////////////////////////////////////////
28 /// 定义引擎坐标系统
29 //////////////////////////////////////////////////////////// 
30 ////////////////////////////////////////////////////////////
31 /// 引擎的坐标系统定义如下:
32 ///     以指向屏幕右方的坐标轴为第一坐标轴(1)
33 ///     以指向屏幕下方的坐标轴为第二坐标轴(2)
34 ///     以垂直屏幕向外的坐标系统为第三坐标轴(3)
35 ///     以方向相反的坐标轴其方向为负(-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         //! 必须保证参数坐标轴的合法性
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)
首先给坐标系统排一个次序,然后定义正向的坐标轴方向,然后就可以抽象出万能的直角坐标系统了
当然为了方便起见这里给定了3个常见的坐标系统分别为引擎坐标系,OPENGL坐标系统和3dmax坐标系统
posted on 2010-02-08 21:12 ccsdu2009 阅读(973) 评论(1)  编辑 收藏 引用
Comments
  • # re: 盖莫游戏引擎中的坐标系统设计
    ccsdu2009
    Posted @ 2010-02-08 21:24
     1 ////////////////////////////////////////////////////////////
     2 /// 坐标轴枚举
     3 //////////////////////////////////////////////////////////// 
     4 enum AXIS_TYPE
     5 {
     6     AXIS_X = 1,
     7     AXIS_Y = 1 << 2,
     8     AXIS_Z = 1 << 4 
     9 };
    10 
    11 ////////////////////////////////////////////////////////////
    12 /// 坐标轴方向枚举
    13 //////////////////////////////////////////////////////////// 
    14 enum AXIS_DIRECTION
    15 {
    16     AXIS_DIRECTION_UP   = 1,
    17     AXIS_DIRECTION_DOWN = -1
    18 };
      回复  更多评论   

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理