Ogre 整体框架入门
ogre 是面向对象的3d图形引擎。
root 是引擎的一个界面类,包含很多快捷的调用其他类的接口。
在ogre中,广泛的使用了单件模式,同时最大的保证了你不需要自己管理资源,除了是你自己new的对象(这很少),基本你只需让ogre负责资源管理就行。这对于一个复杂的类库来说,确实是一个很强大的特性。
ogre主要分为场景管理(SceneManager),资源管理(ResourceGroupManager),渲染器(RenderSystem),还有活动对象(Movable Object)这几样重点的。其中渲染器是封装底层图形api的,一般无需进行编程。资源管理器负责调度程序所需要的模型,材质,纹理等资源。而重点,是放在场景管理和对活动对象的编程上。场景管理是管理3d逻辑空间的划分,变换,和空间搜索等操作的。其中划分是一个场景管理的固有功能,无需编程,主要编程在于3d空间变换和空间搜索上,而将活动对象挂接在3d空间的树状对象点上。树状抽象了每个点的3d空间,有自身空间,父空间,还有根空间(也就是世界空间坐标系)。活动对象是一个具体的可以渲染的对象,比如模型,纹理,材质,粒子等,或者是一些协助渲染的对象,比如摄像头,灯光等。
这么复杂的一个对象结构,他们是怎样通信的呢。我留意到了,几乎所有“实例”,都有一个对应的字符串相关,这是一个标识对象和搜索对象的快捷的办法。比如我们要搜索“head"模型,只需要在资源管理器的查找api中将"head"传递过去。然后,所有的对象都有一个对象管理器的单件实现来负责管理,这就为我们提供了简单的入口点。
另一个程序编写的重点在于活动对象本身。主要是他的属性的设置上,相当丰富,ogre的做法是通过脚本来设置。你会看到材质脚本,纹理脚本,模型脚本, GPU程序脚本,粒子脚本等。这在某种程度上,也帮助了可视化辅助工具的开发。假设,我们都能够用工具来生成这些脚本,那么我们实际要编程的东西就可以少很多了。
Ogre 整体框架入门的更多相关文章
- Duilib源码分析(一)整体框架
Duilib界面库是一款由杭州月牙儿网络技术有限公司开发的界面开源库,以viksoe项目下的UiLib库的基础上开发(此后也将对UiLib库进行源码分析):通过XML布局界面,将用户界面和处理逻辑彻底 ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- [c#]asp.net开发微信公众平台(7)前6篇的整体框架demo源码
这里给出的demo是具备整体框架的微信公众平台源码, 所谓demo就是拿过去就可以直接演示使用的东西, 当然不会具备非常详细的具体到业务层面.数据层面的东西, 每个人都可以在此基础上自由发挥, 只 ...
- Selenium自动化测试框架入门整理
关注嘉为科技,获取运维新知 本文主要针对Selenium自动化测试框架入门整理,只涉及总体功能及框架要点介绍说明,以及使用前提技术基础要求整理说明.作为开发人员.测试人员入门参考. 本文参考:Se ...
- Reactive UI -- 反应式编程UI框架入门学习(二)
前文Reactive UI -- 反应式编程UI框架入门学习(一) 介绍了反应式编程的概念和跨平台ReactiveUI框架的简单应用. 本文通过一个简单的小应用更进一步学习ReactiveUI框架的 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。
系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- CI框架入门1
CI框架入门: 1.url的特点 2.目录结构/布局 3.MVC分别在哪里,如何依葫芦画瓢 4.安全性 ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
- 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战
前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- Chef vs Puppet vs Ansible vs Saltstack: Which Works Best For You?
Ansible vs SaltStack 谁才是自动化运维好帮手? - CSDN博客 https://blog.csdn.net/a105421548/article/details/53558598 ...
- govendor
cd 到工程目录. govendor init : 初始化 govendor fetch : 拉取包 go 1.6以后编译go代码会优先从vendor目录先寻找依赖包: controllers\ar ...
- poj 1363 Rails (【栈的应用】 刘汝佳的写法 *学习)
Rails Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25964 Accepted: 10199 Descripti ...
- linux下把命令执行的结果输出
我们知道在linux下当我们想把文字用命令输入到一个文本下时可以用echo命令 例:echo "nihao" > /z.txt 同样当我们想把命令执行的结果也输入到一个文 ...
- 如何强制ffmpeg编码时输出一个关键帧
http://blog.csdn.net/ashlingr/article/details/7829429 如何强制ffmpeg编码时输出一个关键帧 如何强制ffmpeg编码时输出一个关键帧 AV ...
- 恶心的struts标签,等我毕业设计弄完了,瞧我怎么收拾你。
1.从java action中到页面中获取变量值的struts标签 获取从bean中定义的对象中属性的值: <s:property value="#request.cardTo.acc ...
- map的详细用法 (转
map的详细用法: map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能 力,由于这个特性,它完成有可能在我 ...
- CKEDITOR 默认最大化
createEditor("newsEditer"); //创建一个editer //editer 最大化 CKEDITOR.instances["newsEditer& ...
- codeforces 701A A. Cards(水题)
题目链接: A. Cards 题意: 问两个数的和相同,怎么组合; AC代码: #include <iostream> #include <cstdio> #include & ...
- python 基础之第三天
例子1:8位数的随机密码 #!/usr/bin/python # coding:utf-8 import string import random pwd = '' for i in range(8) ...