SDK启动例子

http://www.it165.net/pro/html/201403/10144.html

SceneManager,

SceneManager, Entity, SceneNode是OGRE中三个基本模块。OGRE的应用程序从SceneManager入口。SceneManager控制出现在场景中的所有东西,包括其中的元素、摄像机(Camera)和平面等。OGRE中有很多种类的SceneManager有

Octree Scene Manager
Terrain Scene Manager
Nature Scene Manager (ogreaddons)
Paging Scene Manager (ogreaddons)
BSP Scene Manager
DotSceneOctree Scene Manager (ogreaddons)
可在创建SceneManager时传入一定的参数指定。

实体(Entity)

实体(Entity)是我们可以在场景中绘制的对象。它可以使3D网格所表示的所有东西(包括山、树、地形等,但是不包括光、颗粒、摄像机等,因为这些不在网格中被表示)。注意,OGRE把可绘制的实体从方向、位置等因素中分离出来。这意味着,我们不能直接把一个实体绘制到场景中。如果要绘制一个实体,我们只能把它和一个节点关联起来,这个节点包含位置、方向等信息。
实体可以通过函数 Entity::setVisible() 来控制实体的可见性,也可以通过函数 Entity::isVisible() 来判断实体的可见性。
实体还可以通过 Entity::getName() 函数来获取实体的名字。用Entity::getParentSceneNode() 函数来得到和该实体相关联的节点。
可以通过SceneManager的getEntity函数来得到节点的名字

节点(SceneNode)

上面已经提到,SceneNode保存着一个实体的位置、方向等信息。SceneNode并非一个实体,它不能被现实在场景中。实际现实在场景中的只是那些真正的实体。
一个节点可以关联任意多个实体。它也可以关联光(Light)、摄像机(Camera)等的对象,从而控制它们的位置和方向。一个节点也可以作为一个子节点而关联到其它节点上去,然后得到一个具有一系列节点的层次结构。需要注意的是,一个节点的信息,总是相对于其父节点的信息的。每个SceneManager中包含一个根节点来关联由它创建的所有子节点。
节点可以通过getPosition 和setPosition 函数(相对于它的父节点)来控制节点的位置。也可以通过translate函数来移动实体(注意函数参数的值)。
除了控制节点位置,SceneNode还能够控制显示比例(用scale函数—有三个方向的比例调整用具体的比例值控制)和旋转
void Ogre::Node::roll(const Radia& angle, TransformSpace relativeTo = TS_LOCAL)
绕z轴旋转
void Ogre::Node::yaw(const Radia& angle, TransformSpace relativeTo = TS_LOCAL)
绕y轴旋转
void Ogre::Node::pitch(const Radia& angle, TransformSpace relativeTo = TS_LOCAL)
绕x轴旋转
节点可以通过 resetOrientation 函数来重置所有对于对象的旋转。也可以用setOrientation,getOrientation 和 rotate 函数来实现更高级的旋转
节点可以通过numAttachedObjects,getAttachedObject(这个函数有多种版本),detachObject (多版本)和detachAllObjects 等函数来获取相关联的实体的信息,并控制关联。
移动父节点将作用到子节点,但是移动子节点将不对父节点产生任何作用。
可以通过SceneManager的getSceneNode函数来得到节点的名字。

Get Start

为了能够看到我们所创建的实体、设置的光线等,我们要做的第一件事是设置周围环境的颜色(默认SceneManager对象已经创建):
void Ogre::SceneManager::SetAmbientLight(const ColourValue & colour)
然后,就是通过SceneManager对象创建一个实体:
const String& meshname)
第一个参数是要创建的实体的名字,每一个实体都必须有一个唯一的名字。
第二个参数是我们将使用网格(.mesh文件),作为参数的mesh文件是需要被提前导入的。
正如前面提到的,既然我们已经创建了一个实体,我们就必须有一个节点对象去关联它。因为SceneManager中有一个根节点,所以,我们只要创建它的子节点即可
createChildSceneNode( const String& nodename
const Vector3& translate = Vector3::ZERO
const Quaternion& rotate = Quaternion::IDENTITY )
这个函数首先得到SceneManager中的根节点,然后由这个根节点去创建子节点。和创建实体的函数一样,我们必须为创建的节点指定一个唯一的名字。
最后,我们需要把已经创建的节点和实体相关联
void Ogre::SceneNode::attachObject(MovableObject *ogj)

坐标和向量

在深入了解OGRE的节点和实体相关知识前,我们要先了解什么是场景的坐标什么是向量(Vector)。在水平面上,OGRE的坐标轴为x和z轴,而y轴则作为垂直线上的轴。从我们的显示器看过来,x轴是指向右边的,y轴是指向上边的,z轴是指向外边的。
OGRE用Vector类来表示实体的位置和方向。OGRE中有表示2维(Vector2)3维(Vector3)4维(Vector4)的向量,其中Vector3使用最普遍。
由于.mesh文件中实体的面对方向是不定的,我们可以在创建节点的时候指定实体面对的方向。参照上面创建节点的函数。

3D世界 ORGE SceneManager GetStart相关推荐

  1. NeHe OpenGL第十课:3D世界

    NeHe OpenGL第十课:3D世界 加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由 ...

  2. NeHe OpenGL教程 第十课:3D世界

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. C++ Opengl 3D世界源码

    C++ Opengl 3D世界源码 项目开发环境 项目功能 项目演示 项目源码传送门 项目开发环境 开发语言:C++和IDE:VS2017,操作系统Windows版本windows SDK8.1,三方 ...

  4. ROS机器人程序设计(原书第2版)3.9.1 使用rqt_rviz在3D世界中实现数据可视化

    3.9.1 使用rqt_rviz在3D世界中实现数据可视化 在roscore运行时,启动rqt_rviz(请注意rviz在ROS hydro中依然有效): 我们将会看到如下图所示的图形化工作界面: 在 ...

  5. [文摘20080919]小软件将网页变为3D世界

    本文转自:http://news.cnblogs.com/n/42499/ -------- ExitReality,一家名不见经传的澳大利亚软件开发商日前宣布了他们的同名软件作品,号称能够将整个互联 ...

  6. 超级马里奥游戏像素素材_《超级马里奥3D世界+库巴之怒》游戏文件尺寸相当小...

    现在的玩家越来越关心游戏容量问题,动辄100+GB的文件尺寸常常会让储存空间不堪重负,所以玩家在选游戏之前经常会看看这款游戏占多大空间,再算一算自己的机器里能装多少.在<超级马里奥3D世界+库巴 ...

  7. delphi 实现屏幕旋转代码_代码检查 | 如何用Processing实现3D世界

    一花一世界,一叶一菩提.每个人眼中的花是不一样的,每个人眼中的世界也是不一样的 .昔时佛祖拈花,惟迦叶微笑,既而步往极乐.在菩提树下,从一朵花中便能悟出整个世界,最终得升. 今天就来给大家介绍日本先生 ...

  8. 基于mfc的图形学实例_前端图形学(二十)——退后!!我要开始进入3D世界了...

    欢迎来到[畅哥聊技术]前端图形学相关技术文章,更多精彩内容持续更新中,敬请关注. 写在前面 先说好,今天所说的3D并不是大家惯性思维说3D就想到了WebGL,那么接下来的文章都是基于Canvas2d来 ...

  9. OpenGL基础12:进入3D世界

    前置:OpenGL基础11:空间 一.坐标系 我们都学过坐标系,根据z轴的方向,一般有两种不同的坐标系表示方法: 其中拇指是x轴正方向,食指是y轴正方向,中指是z轴正方形 OpenGL约定是右手坐标系 ...

  10. D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵

    D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵,有需要的朋友可以参考下. D3D中绘画3D模型基本上就是靠3个矩阵World, View, Projection来联合进行模型位置定位.视角定 ...

最新文章

  1. Javascript 节点 全面解析
  2. x+2y+3z=n的非负整数解数
  3. 人生苦短:Python里的17个“超赞操作
  4. Python 面向对象编程(进阶部分)
  5. leetcode350. 两个数组的交集 II
  6. 爬虫 404 try_Python爬虫MOOC笔记
  7. django 1.8 官方文档翻译: 1-1-1 Django初探
  8. django 实现linux运维管理平台
  9. 95-140-126-源码-transform-算子Sum
  10. Vue框架引入JS库的正确姿势
  11. CentOS网络配置与重启方法
  12. 《Java 8 in Action》Chapter 12:新的日期和时间API
  13. 逻辑卷管理(LVM)
  14. DBConvert Studio - 数据库迁移和同步 - Crack
  15. codeforce 760 B Frodo and pillows 二分搜索
  16. python求球的表面积_python中计算体积或表面积的好算法
  17. 深度学习:GCN(图卷积神经网络)理论学习总结
  18. 中小企业会计核算存在的问题及对策
  19. 在DeSmuME模拟器上成功运行AK2i的内核,破解AK2i命令集
  20. zkteco iface702 中控考勤机java开发步骤二---获取考勤机 的考勤数据

热门文章

  1. python3日期时间运算_马克的Python学习笔记#数字,日期和时间3
  2. 学习笔记1——常用的注意力机制(即插即用)
  3. 爱上小西装外套的16个瞬间
  4. 你真的懂Java的ArrayList吗?
  5. excel文件打不开怎么办_移动硬盘打不开提示格式化怎么办?
  6. java 打印心_在Java中打印输出心形图案!
  7. 图解通信原理与案例分析-17:2G GPRS通用分组无线业务详解
  8. 浏览器被hao123拦截
  9. python f检验 模型拟合度_模型评估指标(RMSE、MSE、MAE、R2准确率、召回率、F1、ROC曲线、AUC曲线、PR曲线)...
  10. html水平线向上移动代码,HTML 水平线