您的位置:首页 > 编程语言 > C语言/C++

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)。

源码下载

本贴转自开发视界
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: