Symbian C++的3D游戏引擎的分析(附源码下载)

 

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

 

源码下载

 

本贴转自开发视界

浅墨出品,零资源分下载,分享精神至上~ 5.0版新加入多3D模型载入功能类,载入了地狱恶魔,人类骑士,天堂雷龙三个精美的游戏模型。 另外,关于雪花粒子效果提醒大家一下,可在SnowParticleClass.h中的PARTICLE_NUMBER宏中改变雪花粒子数量,默认粒子数量为3000,1G显存的显卡取10万粒子数量帧数就只有8帧了。所以要自己改雪花粒子数量的话请根据自己的显卡性能酌情选择,如果你取个非常大的50万粒子数量,显卡吃不消烧了可别怪我- - 其中的3D人物模型来自英雄无敌6。 背景音乐来自魔兽争霸3。 一个综合型的Direct3D示例程序的5.0版。 用键盘上W,A,S,D,I,J,K,L,↑,↓,←,→12个键加上鼠标在美丽的三维空间中翱翔。包括了Direct3D初始化,DirectInput输入处理,顶点缓存,光照与材质,文字输出,颜色,纹理贴图,四大变换,网格模型,X文件载入等等知识(当然还有默认被开启的深度缓存),以及地形系统模拟,三维天空模拟,粒子系统源码的配套博文是 《 【Visual C++游戏开发五十一 浅墨DirectX教程十九 网格模型进阶之路》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8770426, 点击Release文件夹下的exe文件可以直接看到运行效果,运行需要DirectX运行库的支持。报缺少D3D的DLL系列错误的童鞋们请google/百度一下 “DirectX 9.0c runtime”,下载并装个最新版的。 报缺少MVCR100D.Dll错误的朋友们去下一个安装就可以了,或者直接点击sln打开工程再次编译一次。 如果是想调试并运行源代码,但是报错了,请去下载最新版DirectX SDK并进行DirectX开发环境的配置。 编写环境:VS2010 我的博客地址是http://blog.csdn.net/zhmxy555,源码结合配套文章一起看效果更佳。 希望能和大家一起交流,共同学习,共同进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值