gb的渲染中的几个类
来源:互联网 发布:织梦cms源代码 编辑:程序博客网 时间:2024/06/11 05:22
文章学自于:http://www.cppblog.com/rise-worlds/archive/2009/04/22/80688.html
gb的渲染中的几个类:
RenderFrame
RenderStep
RenderClick
RenderView
******************************************************************************************************************************
RenderFrame 一个完整的渲染帧,它封装了上层对渲染系统调用的接口,每一个RenderFrame中又包括多个NiRenderStep;
RenderStep 一帧中一个渲染步骤,每一个步骤又包含着n个渲染批 NiRenderClick;
NiRenderClick 一个渲染批,代表了图形硬件的一次绘制操作,对渲染队列中所有的对象的顶点缓存调用DrawPrimitive,每个RenderClick对应了一个RenderTarget(相当于一组顶点流),RenderClick精确的字面意思就是一次描画,这个类的功能也基本是这样,知道了要画的东西,但是要画到什么上去就需要RenderClick了,每个RenderClick对应了一个RenderTarget。就是要描画的地方。一个描画的过程是这样的,首先找到RenderTarget就是要描画的地方,因为如果是后期特效,有时候会有多个RenderTarget。
RenderView 相当于是我们要渲染的一个物件,通过AppendScene这个接口挂接到我们当前的场景节点上;RenderView里还有个重要的工具叫做Culler,Culler是做什么用的呢?是负责裁剪的,这里的裁剪是逻辑上的裁剪,就是精确到几何体级别的裁剪。(注意不是三角面级别的)。Culler是作为Processor被加进去的,就是一个裁剪的过程。Culler提供了一些抽象接口,来满足用户的自定义裁剪。就是说你可以根据你的需要来在渲染前进行裁剪。
调用方式:
当应用程序调用NiRenderFrame的Display接口时, NiRenderFrame会依次调用每一个NiRenderStep的Render()接口,NiRenderStep就会执行所有的NiRenderClick操作。
对于每个NiRenderClick来说,首先要设置视口和渲染目标,也就是渲染数据流的入口和出口。视口建立以后就可以通过关联的摄影机对场景图中的对象进行裁剪(默认的有视口裁剪和遮挡裁剪,此外还可以通过回调函数加入自己的裁剪方式),将未被裁剪的对象放入渲染队列。然后Gambyro会根据材质来对渲染队列中的对象进行排序,让材质相同的对象处于相邻位置,这样可以减少切换shader的开销。
01.<pre class="cpp" name="code"> // 创建渲染纹理视口.通过关联的摄影机对场景图中的对象进行裁剪 02. Ni3DRenderView* pkRenderedTextureRenderView = NiNew Ni3DRenderView( 03. m_spExtraCamera, m_spCuller); 04. pkRenderedTextureRenderView->SetName(m_kRenderedTextureRenderViewName); 05. //挂接到场景中 06. pkRenderedTextureRenderView->AppendScene(m_spScene); 07. 08. // 创建渲染纹理的NiRenderClick. 09. NiViewRenderClick* pkRenderedTextureRenderClick = NiNew NiViewRenderClick; 10. pkRenderedTextureRenderClick->SetName(m_kRenderedTextureRenderClickName); 11. pkRenderedTextureRenderClick->AppendRenderView( 12. pkRenderedTextureRenderView); 13. //设置渲染目标 14.pkRenderedTextureRenderClick->SetRenderTargetGroup(m_spRenderTargetGroup); 15. pkRenderedTextureRenderClick->SetClearAllBuffers(true); 16. pkRenderedTextureRenderClick->SetPreProcessingCallbackFunc( 17. RenderedTextureRenderClickPre, this); 18. pkRenderedTextureRenderClick->SetPostProcessingCallbackFunc( 19. RenderedTextureRenderClickPost, this);
- gb的渲染中的几个类
- gb的渲染中的几个类
- GB学习【9】--渲染流程
- gb场景渲染步骤图
- Android 中的view 的渲染
- 计算机中的bit byte(B) mb gb 的关系
- JDK中的几个有用的类
- 回答GB的问题~
- 4GB的含义
- MFC中的几个类
- gb Shadow类
- gb
- gb
- 使用 CSS3 中的伪类渲染表格
- java中的集合类的几个鲜为人知的实用方法
- 进程的4GB内存
- GB和GiB的区别
- WPF中的3D特性和常见的几个类
- Process & Scrum
- gem相关命令使用
- C++ std命名空间
- C++中的虚函数(virtual function)
- 股市赚钱18日线法
- gb的渲染中的几个类
- Install Ruby 1.9.3 with libyaml on CentOS
- Real Time Analytics for Big Data: An Alternative Approach
- 版本控制系统git的安装与使用
- No bean named 'springSecurityFilterChain' is defined
- 网络P4P
- C#使用SQLite数据库详解
- 数据挖掘:如何寻找相关项
- 设置gem源,解决下载慢的问题