- 0
- 0
- 约5.32千字
- 约 8页
- 2020-05-13 发布于浙江
- 举报
OGRE的主要渲染流程
精品文档
精品文档
收集于网络,如有侵权请联系管理员删除
收集于网络,如有侵权请联系管理员删除
精品文档
收集于网络,如有侵权请联系管理员删除
ogre的主要渲染流程
????????很早以前就想写一些关于OGRE的文章了,一直没机会。?
理解一个渲染引擎,我觉得最重要的是先抓住了它的主架构,它的主线,渲染流程,不然的话,一个引擎几万行,甚至几十万行的代码,光是打开solution就能吓你一跳了,OGRE也有十几万行的代码量,我一开始看它的时候也是无从下手,感觉代码太多了,不知道从哪开始看好,这个class看看,那个class看看,由于对整个引擎没有一个清晰的认识,看过了也印象不深,所以,最后,还是决定先找出它的主线,了解它的渲染流程,这样才能有机地把各个部分联系起来。
??????这篇短文也是对OGRE的主要渲染流程的一个介绍,可能对一些class不会太多地去介绍具体的实现细节。我所用的代码都是取自于OGRE的最新的CVS版本。
??????读者最好对OGRE有一定的了解,至少得看懂它的example,不然可能一些东西理解起来比较困难。对D3D,OPENGL有一定了解更好。
??????如果你看过D3D?SDK中带的例子,你一定知道一个比较简单的3D程序要运行起来,至少都会涉及以下的几部分:
??????首先是数据的来源,包括顶点数据,纹理数据等,这些数据可以从文件中读取,也可以在程序运行时生成。
??????接下来,我们会建立顶点缓冲区把顶点保存起来,建立texture对象来表示texture,对顶点组成的物体设置它在世界坐标系下的坐标,设置摄像机的位置,视点,设置viewport的位置和大小,然后就可以在渲染循环中开始调用渲染操作了,经过了front?buffer和back?buffer的交换,我们就能在屏幕上看到3D图形了,伪代码如下:
??????setupVertexBuffer
??????setWorldTransform
??????setCamera
??????setProjectionTransform
??????setViewport
???????beginFrame
??????setTexture
??????drawObject
??????endFrame?
??????以下就是渲染一个物体的主要步骤,在我看来,这就是3D程序的主线,同样道理,无论你多复杂的渲染引擎,都得实现上述的这些步骤,其他的一些效果如阴影,光照等,都是附着在这条主线上的,所以,如果你能在你所研究的渲染引擎上也清晰地看到这条主线,可能对你深入地研究它会大有帮助,下面,我们就一起来找到OGRE中的这条主线。
??????OGRE的渲染循环都是起源于Root::renderOneFrame,这个函数在OGRE自带的example中是不会显式调用的,因为example都调用了Root::startRendering,由startRendering来调用renderOneFrame,如果你用OGRE来写真正的游戏,或者编辑器,你可能就需要在的消息主循环中调用renderOneFrame了,顾名思义,这个函数就是对整个OGRE进行一帧的更新,包括动画,渲染状态的改变,渲染api的调用等,在这个函数中,会包括了我们上述伪代码的几乎全部内容,所以是本文的重点所在。
??????进入renderOneFrame,可以看到头尾两个fire函数,这种函数在OGRE中经常出现,一般都是fire…start和fire…end一起出现的,在这些函数中,可能会处理一些用户自定义的操作,如_fireFrameStarted就会对所以的frameListener进行处理,这些fire函数可以暂时不用理会,继续看_updateAllRenderTargets,在这个函数中,会委派当前所用的renderer对所有创建出来的render?target进行update,render?target也就是渲染的目的地,一般会有两种,一种是render?texture,一种是render?buffer,接着进入RenderSystem::_updateAllRenderTargets,可以看到在render?system中,对创建出来的render?target是用RenderTargetPriorityMap来保存的,以便按照一定的顺序来对render?target进行update,因为在渲染物体到render?buffer时,一般会用到之前渲染好的render?texture,所以render?texture形式的render?target需要在render?buffer之前进行更新。
??????进入render?targ
您可能关注的文档
- offer范本讲课讲稿.doc
- Of_Studies_(英汉对照)培训资料.doc
- Oh, the Places You’ll Go!中文翻译讲课教案.doc
- ok3w新闻发布系统学习资料.doc
- OKR体系教学教材.doc
- Online Teaching 作文知识讲解.doc
- OPC服务器设置讲解学习.doc
- Openssh安全配置 V1.0知识分享.doc
- OpenSSH配置讲课讲稿.doc
- OPL单点课程模板教学教材.doc
- 伟明环保-市场前景及投资研究报告-境内业务稳健运行,印尼市场贡献边际增量.pdf
- 桂东县法院系统招聘考试真题2025.pdf
- 贵州省黔南布依族2026年中考三模物理试题及答案.pdf
- 贵州省黔南州2026年中考语文二模试卷附答案.pdf
- 贵州省铜仁市2026年中考语文二模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套完整答案详解.docx
- 贵州省毕节市2026年中考语文一模试卷附答案.pdf
- 贵州省贵阳市南明区2026年中考语文一模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套参考答案详解.docx
- 贵州省贵阳市白云区2026年中考二模物理试题附答案.pdf
最近下载
- 介绍楚门的世界.pptx VIP
- 2025年拍卖师市场饱和度与竞争红海中的差异化突围策略分析专题试卷及解析.pdf VIP
- 2025年互联网营销师商业谈判与供应链管理能力专题试卷及解析.pdf VIP
- 2025年化工工程师多搅拌器串联与并联系统操作优化专题试卷及解析.pdf VIP
- 2025年拍卖师农产品拍卖拍卖师竞买人购买反馈专题试卷及解析.pdf VIP
- 2025年AWS认证AmazonRDS只读副本的只读副本的只读副本在主实例故障后的角色切换专题试卷及解析.pdf VIP
- 法律职业资格(主观题)真题答案解析2025.docx VIP
- 12J926-无障碍设计标准图集.pdf VIP
- 导弹的总体设计(西工大课件).pdf VIP
- 2025年演出经纪人演出经营许可证申领与年检专题试卷及解析.pdf VIP
原创力文档

文档评论(0)