Symbian C++的3D游戏引擎的分析(附源码下载)
2009-11-04 10:20
260 查看
3D Types部分仅仅由一个头文件组成。里面包含了一些需要的数据结构的类,并且定义了fixed point的位数。在Symbian C++里面,浮点数都是由int来实现的,通过固定小数点的方法来模拟浮点数,虽然精度有限,但是足够用了。
3D Types里面主要有以下几个类:
TMatrix
一个矩阵类,不过是4x3的。应该是专门用来做旋转的。因为这个引擎并没有用到其次坐标系,应该是出于效率的考虑。所以平移应该是通过手动来做的。不知道Symbian C++里面是否可以嵌asm,其实这些基础类应该是用汇编来写的,如果可以的话要优先考虑优化这些类。
TVertex
顶点类,提供了一些运算符的重载,还能通过矩阵进行变换。
TPlaneNormal
半平面类。通常的半平面都是由一个顶点和通过这个顶点的法向量。而这个里面只记录了法向量和一个距离,应该是平面到原点的距离(猜的)。
TFrustum
视锥类,所谓视锥就是人能看到的一个范围,通常由4个侧面和近、远2个平面组成。不在视锥里的物体是看不见的。所以通常用视锥来做剪取。
TFace
一个三角形类。空间的三角形,由3个顶点和3组纹理坐标构成。
3D Objects
这个部分也是只由一个头文件组成。这个头文件就是把各个物体的几何信息硬编码到代码里面了。估计从外面读数据是很时间的,所以直接放到的程序里面。虽然数据和程序不分离非常不好,但是在特殊的地方也只能这么做了。
声明的物体有Car,Road,Grass,House和TiledMap。前4个都是记录了顶点个数、面个数、顶点位置和面信息四个部分,而map则是记录了地图的构成。
3D Base
引擎把常用的东西都放到了一起,通过一个类封装了起来,这个类就是C3DBase类。该类提供了如下方法:
InitFrustum():通过屏幕大小来初始化视锥。值得注意的是,该引擎中仅仅用到了视锥当中的5个平面,也就是说并没有用到远平面。
ViewFrustum():返回当前视锥。
SinTable()/CosTable():正余弦函数在3D中尤其是在旋转上非常常用,如果每一次使用都要通过系统函数计算一下的话,那就太慢了。所以通常都是预先生成好表,然后在使用的时候去查。如果要求精度不高的话,直接在表里面找就可以了,否则就需要做线性插值了。
RotateX()/RotateY()/RotateZ():旋转函数,不过注释明确写出:从未使用过……(基于效率的考虑)
QSort():快排,这个没啥说的,想要效率就得这么来。
PloygonCount():返回多边形个数。
ResetPloygonCount():多边形个数清零。
AddPolygonCount():增加多边形的个数。这里的多边形个数仅仅起到记录的作用,统计是通过别的类来实现的(应该是C3DRenderer)。
源码下载
本贴转自开发视界
3D Types里面主要有以下几个类:
TMatrix
一个矩阵类,不过是4x3的。应该是专门用来做旋转的。因为这个引擎并没有用到其次坐标系,应该是出于效率的考虑。所以平移应该是通过手动来做的。不知道Symbian C++里面是否可以嵌asm,其实这些基础类应该是用汇编来写的,如果可以的话要优先考虑优化这些类。
TVertex
顶点类,提供了一些运算符的重载,还能通过矩阵进行变换。
TPlaneNormal
半平面类。通常的半平面都是由一个顶点和通过这个顶点的法向量。而这个里面只记录了法向量和一个距离,应该是平面到原点的距离(猜的)。
TFrustum
视锥类,所谓视锥就是人能看到的一个范围,通常由4个侧面和近、远2个平面组成。不在视锥里的物体是看不见的。所以通常用视锥来做剪取。
TFace
一个三角形类。空间的三角形,由3个顶点和3组纹理坐标构成。
3D Objects
这个部分也是只由一个头文件组成。这个头文件就是把各个物体的几何信息硬编码到代码里面了。估计从外面读数据是很时间的,所以直接放到的程序里面。虽然数据和程序不分离非常不好,但是在特殊的地方也只能这么做了。
声明的物体有Car,Road,Grass,House和TiledMap。前4个都是记录了顶点个数、面个数、顶点位置和面信息四个部分,而map则是记录了地图的构成。
3D Base
引擎把常用的东西都放到了一起,通过一个类封装了起来,这个类就是C3DBase类。该类提供了如下方法:
InitFrustum():通过屏幕大小来初始化视锥。值得注意的是,该引擎中仅仅用到了视锥当中的5个平面,也就是说并没有用到远平面。
ViewFrustum():返回当前视锥。
SinTable()/CosTable():正余弦函数在3D中尤其是在旋转上非常常用,如果每一次使用都要通过系统函数计算一下的话,那就太慢了。所以通常都是预先生成好表,然后在使用的时候去查。如果要求精度不高的话,直接在表里面找就可以了,否则就需要做线性插值了。
RotateX()/RotateY()/RotateZ():旋转函数,不过注释明确写出:从未使用过……(基于效率的考虑)
QSort():快排,这个没啥说的,想要效率就得这么来。
PloygonCount():返回多边形个数。
ResetPloygonCount():多边形个数清零。
AddPolygonCount():增加多边形的个数。这里的多边形个数仅仅起到记录的作用,统计是通过别的类来实现的(应该是C3DRenderer)。
源码下载
本贴转自开发视界
相关文章推荐
- 【C++】Android (Light)RefBase-sp-wp引用计数-智能指针源码分析
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- QT源码分析和下载地址
- 【Tomcat9源码分析】源码下载、编译与调试
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 【C++资料免豆下载】大量教程+工具+源码下载地址汇总(转载)
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 从零开始学C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例
- HLS学习(七)HLSDownloader源码分析(6)下载TS文件片段
- [置顶] 从零开始学C++之boost库(一):详解 boost 库智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> 源码分析)
- Android 获取Root权限之后的静默安装实现 代码示例分析&&源码下载
- 开源中国 OsChina Android 客户端源码分析(9)下载APK功能
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- OpenCV人脸识别C++源码分析
- C++ 智能指针(shared_ptr/weak_ptr)源码分析
- [Java] SSH框架笔记_框架分析+环境搭建+实例源码下载
- NICTCLAS:词法分析系统ICTCLAS的.NET版(源码提供下载)
- 基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序
- Symbian C++ API 积累(病毒分析时参考)
- spring源码分析一、源码下载