场景管理器的使用

  最常使用的坐标系统空间(同时也是Ogre程序所能提供的)即是世界空间(World)、父节点空间(Parent)以及本地空间(Local)。

1、世界空间

  就是物体所存在的地方,当我们把一个模型放进世界模型里面去,那么它就有了一个世界坐标,这个世界坐标是用来标记世界中不同的模型所处的位置的。在世界空间里,世界的中心就是远点(0,0,0)。而在ogre中,这个也相当于场景根节点的位置,所以世界空间在ogre中也可以理解为“相对于场景根节点”。世界空间也意味着用全局的X,Y,Z坐标。

  父节点空间变换是相对于一个节点的父节点,也就是把父节点的坐标作为变换空间的矩阵原点。本地空间变换是相对于对象绑定的节点本身。大多数情况下,物体的移动是在父空间里面进行,旋转和缩放是在本体空间里面做,这也是ogre中所默认的操作方式。

2、物体空间

  你所创建的物体最终都要放到世界空间里。而所谓物体空间是指相对于物体本身的坐标系。

3、本地空间

  本地空间   ----   就是绕着自己的轴旋转,相对于自己的中心进行缩放。

4、父节点空间(Parent Space)

  父节点空间变换就是相对于父节点的变换。

5、场景中的活动物体(Movable Scene Object

  活动物体(Movable Object)由场景管理器创建,并且绑定到场景节点上,最后再由场景管理器销毁。

  以资源为基础的物体(Resource-Based Objects)

  在Ogre中有相当多的场景内容是根据磁盘的信息来创建的,在这里把它们称为以资源为基础(也可称为磁盘基础)的活动物体,其中最常见的莫过于模型本身以及相应的骨骼数据。

  以四边形为基础的物体(Qurd-Based Objects)

  在活动物体中有很多的以四边形(Quad)为基础的实体,其中包括了粒子系统(Particle System)、公告栏(Billboards)、跟踪轨迹(Ribbon Trail)、表层(Overlay)和天空盒(Skybox,以及相关的天空面Skyplane和穹顶Skydemo)。

  天空面、天空盒和穹顶之间的区别

  其中最大的共同点是它们总是和摄像机保持着固定距离;其次,它们要么是在所有场景物体渲染之前渲染(这也是默认的情况),要么是在所有场景物体渲染之后渲染;

  天空面(Skyplane)  

  天空面就是用来模拟现实世界中天空的一个平面。和ogre中所有其他的平面一样,通过法线和距离来确定在场景中放置位置。

  穹顶(Skydome)

  穹顶技术使用了五个平面来来构造天空,它是一个顶和四个侧面组成的半盒,就是没有底额盒子。天空半盒的每一个面都和摄像机保持固定的距离。这个距离可以交给具体应用来配置。

  天空盒(Skybox)

  首先要注意的是,天空盒并不是简单的在穹顶技术上增加一个底部平面。而是使用了标准的UV坐标变换映射的方法来处理相应纹理,进而只有天空盒才能使用立方体纹理(Cubic Texture)技术来实现天空的细节。

  渲染对象(Rendering Object)

  渲染对象是指用来帮助场景图进行渲染功能的对象,而不是渲染到屏幕的物体。在场景中两个最重要的对象是摄像机和灯光,其中摄像机帮助我们拍摄场景中的物体,而活动的灯光则是你的场景显得更立体和真实。

  摄像机(Camera)

  定义产生一个视截体用来处理渲染工作,有一个近截面和一个远截面。

  灯光(Light)

  分三种,点光源,聚光灯光源,有向光源。

 场景管理器例子:

  使用过程:首先要建立一个场景管理器的实例,然后至少还要构建一个摄像机,并执行“放置一个实体到场景中”的操作。

  建立一个场景管理器和摄像机

 1   virtual void chooseSceneManager(void)
{
// Create the SceneManager, in this case a generic one
mSceneMgr = mRoot->createSceneManager(ST_GENERIC, "ExampleSMInstance");//创建
}
virtual void createCamera(void)
{
// Create the camera
mCamera = mSceneMgr->createCamera("PlayerCam");//
// Position it at 500 in Z direction
mCamera->setPosition(Vector3(0,0,500));//
// Look back along -Z
mCamera->lookAt(Vector3(0,0,-300));//
mCamera->setNearClipDistance(5);//
mCamera->setFarClipDistance(1000);//
}

  创建实体和灯光

 void createScene(void)
{
// Set ambient light
mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));//设置环境光源
// Create a point light
Light* l = mSceneMgr->createLight(“MainLight”); //创建点光源
// Accept default settings: point light, white diffuse, just set position
// NB I could attack the light to a SceneNode if I wanted it to move
// automatically with other objects, but I don’t
l->set Position(,,);  //设置位置
Entity * ent = mSceneMgr->createEntity(“head”, “ogrehead.mesh”);//创建实体
// Set material loaded from Example.material
Ent->setMaterialName(“Examples/EnvMappedRustySteel”);//
// Add entity to the root scene node
mSceneMgr->gerRootSceneNode()->createChildSceneNode()->attachObject(ent);//将实体添加到场景节点
}

  场景节点的移动和旋转

  mSceneNode->translate(100.0, 10.0, 0.0);//场景节点在默认的情况下变换空间为父节点空间(TS_PARENT)

  mSceneNode->translate(100.0, 10.0, 0.0, TS_WORLD);//如果在世界空间进行节点变换,就这样调用

  mSceneNode->translate(0.0,0.0,100.0,TS_LOCAL);//对于本体空间的变换也是类似,本例是将一个节点沿着它朝向的方向“向前”移动100个单位

  对于旋转场景节点而言,默认的变换空间为本地空间(TS_LOCAL);如果你需要不同的旋转空间,必须明确的告知Ogre:

 // 对象绕自己的Y轴旋转一弧度,大约57角度
mSceneNode->yaw(Ogre::Radian(1.0));//
// 对象绕父节点的X轴旋转一弧度,大约57角度
mSceneNode->pitch(Ogre::Radian(1.0), TS_PARENT);//
// 对象绕世界的Z轴旋转一弧度,大约57角度
mSceneNode->roll(Ogre::Radian(1.0),TS_WORLD);//

  缩放不需要关系空间;它在节点本身执行,同时影响节点的所有子节点。

  mSceneNode->scale(2.0, 1.0, 1.0);// 在X轴缩放两倍,其他轴不缩放

ogre3D学习基础6---场景管理器的使用的更多相关文章

  1. ogre3D学习基础11 -- 交换两个场景管理器

    这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头. 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListe ...

  2. ogre3D学习基础8 --- 资源管理器

    资源管理 可管理的资源有: 材质资源:在.material文件中包含的材质脚本定义(技术.通路.纹理单元等数据的定义). 模型资源:经过优化的二进制网格模型文件,扩展名为.mesh.包含几何信息和一些 ...

  3. ogre3D学习基础1 -- 核心对象与脚本技术

    一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...

  4. ogre3D学习基础9 -- 光源程序实例

    这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光.具体内容前面说过,这里就不解释了. 继续在上一章的程序的基础上实现. 1.创建摄像机(Camera) createCamera()函数是 ...

  5. 转:Ogre的八叉树场景管理器OctreeSceneManager

    上面是我绘制的一张图. 关于八叉树场景管理器主要需要关注两个类,其一是松散八叉树的数据结构Ogre::Octree,其二是八叉树场景管理器Ogre::OctreeSceneManager. 下面摘录图 ...

  6. 转:OGRE场景管理器介绍

    一个场景代表在虚拟世界中显示的物品.场景可以包括静态几何体(比如地形或者室内),模型(比如树.椅子等),光和摄像机.场景有下面种类.室内场景:可能由走廊.有家具的屋子和挂着装饰品的墙组成.室外场景:可 ...

  7. [Axiom 3D]3.SceneManager场景管理器

    首先看看Axiom.Core命名空间下public abstract class SceneManager : DisposableObject A SceneManager organizes th ...

  8. ogre3D学习基础17 --- 如何手动创建ogre程序

    建立自己的Ogre程序 一直以来都是使用ExampleApplication.h来写程序,现在来看看它到底有什么神奇的地方. 首先,我们新建一个win32空项目 然后配置环境 最后新建define.c ...

  9. ogre3D学习基础16 -- 手动创建实体(ManualObject)

    这一节练习一下手动创建实体,用到了对象(ManualObject) 第一,依然是模板 #include "ExampleApplication.h" class Example1 ...

随机推荐

  1. 数据库(数据库、表及表数据、SQL语句)

    数据库MYSQL 今日内容介绍 u MySQL数据库 u SQL语句 第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储 ...

  2. css简单动画

    这几天公司需要更新一个移动端web的页面,因为任务简单,就交给作为菜鸟新人的我来做.第一次接触css还是在14年刚上大一的时候跟着html一起学习的,之后就再也没有接触过.所以只好一边学习,一边完成任 ...

  3. Windows Azure 配置Active Directory 主机(1)

    现在越来越多企业将自己业务系统迁移云端,方便公司日常运维管理.这篇文章将简单介绍一下,从 Windows Azure 虚拟网络上的虚拟机 (VM) 中的 Corp Active Directory 林 ...

  4. 检查EXE、DLL、SYS等文件是32位还是64位的

    非.NET文件用:dumpbin.exe /headers file.exe(C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin) . ...

  5. [学习笔记] C++ 历年试题解析(三)--小补充

    小小的补充一下吧,因为李老师又把直招的卷子发出来了.. 题目 1.有指针变量定义及初始化int *p=new int[10];执行delete [] p;操作将结束指针变量p的生命期.(×) 解释:试 ...

  6. python基础之基本数据类型

    1.int 整数 2.bool 布尔 3.str 字符串,一般放小量数据 4.list 列表,可以存放大量的数据 5.dict字典,以key:value的形式存储数据 6.set集合(数学) 7.tu ...

  7. linux - centos7 开放防火墙端口的新方式

    CentOS 升级到7之后,发现无法使用iptables控制Linuxs的端口, google之后发现Centos 7使用firewalld代替了原来的iptables. 下面记录如何使用firewa ...

  8. python中yield的用法详解

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂 ...

  9. iOS应用架构谈-part1概述

    当我们讨论客户端应用架构的时候,我们在讨论什么? 其实市面上大部分应用不外乎就是颠过来倒过去地做以下这些事情: --------------- --------------- ------------ ...

  10. ReactiveCocoa入门-part2

    ReactiveCocoa是一个框架,它能让你在iOS应用中使用函数响应式编程(FRP)技术.在本系列教程的第一部分中,你学到了如何将标准的动作与事件处理逻辑替换为发送事件流的信号.你还学到了如何转换 ...