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函数。
一、碰撞检测
在游戏中,我们经常需要用到碰撞检测。例如我们用枪发射一枚子弹,就必须利用碰撞检测来检查子弹是否击中了敌人。在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函数。
相关文章推荐
- Torque引擎系列之核心类(SimObject)
- Torque引擎系列之核心类(ShapeBase)
- Torque引擎系列之核心类(NetObject)
- Torque引擎系列之核心类(ConsoleObject)
- Torque引擎系列之核心类(GameBase)
- 分布式消息队列kafka系列介绍 — 核心API介绍及实例
- 深度学习系列之CNN核心内容
- 【金阳光測试】基于控件核心技术探讨---Android自己主动化系列(2)---2013年5月
- MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- 小游戏系列算法之四扫雷游戏核心算法,非递归无雷区自动翻开
- 《开涛:网站架构核心技术》读书笔记系列-第15章【disruptor】
- JS核心系列:浅谈 call apply 与 bind
- WCF系列博文(二)-----WCF组成与核心
- 《visual c#.net网络核心编程》学习笔记系列之:流
- 《visual c#.net网络核心编程》学习笔记系列之:常用的数据类型
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列 ----(10):JavaScript核心(晋级高手必读篇)
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)