您的位置:首页 > 移动开发 > Objective-C

Torque引擎系列之核心类(SceneObject)

2009-01-14 18:50 246 查看
前面我介绍了一下netObject类,这篇文章我主要介绍它的子类SceneObject,另外两个子类Sun和MissionArea比较简单。在这里就不多介绍了。从名字就可以看出,SceneObject主要是指场景对象类,包括场景中的天空盒、地形、建筑、人物、交通工具、水体等。SceneObject class 在TGE中主要提供了以下几个功能:1、每个该类对象创建之后都会加入到一个scene graph中。引擎可以通过scene graph高效率的进行物体渲染,用的是BSP算法。2、提供了一些非常重要的辅助函数,例如设置(获取)位置、速度、碰撞盒、大小、重量等函数。3、给物体提供了光照。4、提供了碰撞检测。

一、碰撞检测
在游戏中,我们经常需要用到碰撞检测。例如我们用枪发射一枚子弹,就必须利用碰撞检测来检查子弹是否击中了敌人。在TGE中使用containerRayCast函数来进行检测。基本原理是:引擎有一个全局的碰撞盒容器,每个sceneObject被创建的时候,不仅会被加入到scene graph进行渲染,而且会被加入到一个碰撞盒容器中,物体的碰撞盒是从模型中解析的。当我们用枪发射子弹时,实际上是在碰撞盒容器中产生一条射线。再利用线面相交检测算法,检测到哪个面最先与射线先交,从而得知该射线所碰撞到的物体。顺便说一句,TGE中做一次containerRayCast是很耗计算资源的,特别是在大场景中。所以能不用尽量不要用这个函数。另外TGE中还是先了碰撞盒与碰撞盒的碰撞检测,具体的实现方法就不多说了。
二、辅助函数
SceneObject给脚本提供了一些辅助函数,例如getObjectBox(获取局部坐标系下的碰撞盒)、getWorldBox(获取世界坐标系下的碰撞盒)、getForwardVector(获得向前的速度)、getTransform、getPosition、setTransform、getScale等。利用这些函数我们可以在脚本中对游戏对象进行基本的变换,包括对象的位置、朝向、大小等。
三、场景渲染
TGE的渲染流程:GuiTSCtrl::onRender(主界面渲染、每帧调用一次) ——》EditTSCtrl::renderWorld(渲染场景)——》SceneGraph::renderScene(场景树渲染)———》sceneObject::renderObject(每个物体渲染)。游戏的每次渲染首先是由主界面发起,然后调用客户端的全局SceneGraph进行场景渲染,在SceneGraph会根据摄像机的视角进行裁剪,最后再进行单个物体的渲染。每个SceneObject的子类都要重写renderObject函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: