ogre 学习笔记 - Day 12

ogre 学习笔记 - Day 12

        回过神来,发现,分析的有点太深入了。看了看流程图,SceneManager::renderScene,从更新场景,到渲染场景,流程都有了。OK,不再深入了。

        整理一下。

  • 从Application开始,先创建了一个FileSystem,获取环境变量,设置配置路径。
  •  初始化app,加载 pluginf.cfg,创建root,root里创建了一堆的manager,加载plugin;创建overlaysystem。
  • 设置rendersystem,root初始化,创建窗口;定位资源;初始化RTShaderSystem;加载资源;
  • 开始渲染:初始化RenderTarget;帧循环:更新场景,渲染。

        从流程上看,很容易懂,一条线。只是没想到,ogre 会把场景更新放在了 RenderSystem::_updateAllRenderTargets 里。场景更新与渲染应该是独立的两个阶段,把场景更新阶段归为渲染阶段,有点不合理,因为渲染需要依赖 图形API。 也不太多顾虑是否合理。存在即合理。

        既然ogre是一个流程走完核心部分,那么Listener暂时就不需要分析了。

        回过头,再看 FirstScene,运行。发现,在控制台输出了很多log。由于分析过流程,知道log是哪里输出的。

        看看log,发现一条 '.../oa_rpg3dm2.pk3' of type 'Zip',pk3竟然是zip格式的。

        再次分析 BasicTutorial1::setup()

        

SceneManager* scnMgr = root->createSceneManager();

通过root创建一个场景

RTShader::ShaderGenerator* shadergen = RTShader::ShaderGenerator::getSingletonPtr();
shadergen->addSceneManager(scnMgr);

在RTSS里注册当前场景,RTSS按照名称 RTShaderSystem 是运行时Shader系统,负责渲染。暂时不关注渲染。

scnMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));

设置环境光

 Light* light = scnMgr->createLight("MainLight");
 SceneNode* lightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
 lightNode->attachObject(light);

创建灯光

Camera* cam = scnMgr->createCamera("myCam");

创建相机

getRenderWindow()->addViewport(cam);

设置视口

Entity* ogreEntity = scnMgr->createEntity("ogrehead.mesh");

创建实体

在FirstScene里涉及到 SceneManager, SceneNode, Light, Camera, Viewport, Entity。

viewport 视口,相机产生的图形的显示区域

重点关注 Entity,SceneManger:::creatEntity, ogrehead.mesh是一个资源,使用一个资源创建一个实体,资源的实例化,它是用SceneManager创建的,场景可以同时存在多个,通过场景创建的,那么是不是只能在该场景内使用呢?

class _OgreExport Entity: public MovableObject, public Resource::Listener
 class _OgreExport MovableObject : public ShadowCaster, public AnimableObject, public MovableAlloc

Entity的定义是 离散的,可移动的,较小的物体。需要依附在SceneNode上定义其位置。(自身没有位置还成为可移动的?)

        看看 CreateEntity都做了什么,只是加载资源,新建了一个 Entity,在MoableObject里持有了 SceneManager,那么,Entity是只能在该场景使用。再从之前的,RTSS添加场景,Entity是需要被渲染出来的,也可以看出,Entity与场景绑定。

        接下来就是加载资源了,从之前的学习得知,加载mesh时也会加载材质以及纹理,这里就涉及到材质了。接下来,就应该重点分析资源系统 / 材质系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值