2022年Ogre的渲染系统 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年Ogre的渲染系统 .pdf》由会员分享,可在线阅读,更多相关《2022年Ogre的渲染系统 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Ogre 的渲染系统( Rendering System)盛崇山 http:/ AntsamCGD 渲染系统个人认为就是同图形学有关的一切系统;包括了geometry system 、material system、shader system。Rendering system 分为两部分: API 无关的部分和API 相关部分。后者主要是只同DirectX 和 OpenGL 相关的系统。前者则是两个的共同的特性。API 无关部分同Pipeline Abstraction 有很大的关系,API的部分功能就是设置Pipeline ( Pipeline configuration ) ,Pipeli
2、ne 可以参考 Pipeline Design 。 既然是 Render System 必然是有Target的,我们前面把Scene Manager 比喻成舞台跟导演,那么Render System 就是摄影机,而胶片就是 Render Target。先让我们看一下相关类的UML 图,然后在详细这些类以及相互之间的关系。一、 Render System UML 图 Render System 相关类 UML Part one :图一: Render System 相关类 UML Part one 图一中的类View Port 包含了一个Camera, 另外一个同Render System 相关
3、的类(未画出,图中只有一根聚合的关系线)Root。前面说过把Render System 比喻成摄影机,现在我们进一步的细化:View Port 和 Camera 就是摄影机的摄像头,Render Target就是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - 胶带,那么Render System 就是一个光学系统,它把从摄像头进来的光进行处理变换,然后再把结果写到Render Target 中,而 Root 就是各种各样的道具
4、;那么,演员呢?演员就是游戏中的各种角色;电影剧本对应的是游戏剧本(或者称为策划);化妆师对应的则是美工和建模人员;电影的音乐也越来越重要了,这就类似于游戏中的音乐。Good(_) ,现在让我们想象一下,我们在拍摄现场:导演Scene Manager 摄影机Render System (including view port 、 camera、 target)灯光、道具、服装 Root(engine or Resource Manager) 演员游戏中的角色(mesh、entity)化妆师美工和建模人员剧本游戏策划电影音乐游戏音乐从上面可以看出电影公司和游戏制作公司非常相似,那么一个基本的游戏
5、引擎应该至少包括前面的四项,在场景组织分析那篇文章中从功能上对导演和Scene Manager 进行了类比,我们将在对Render System 具体的分析后在进行类比。 Render Target 的 UML 图如下所示:图二: Render System相关类 UML 图 Part two 电影的胶片不同,Render Target 也有不同( _) 。在上面的两幅图中还有两个listener类应该注意一下,我们将在下面的详细分析中再做具体的分析。二、详细分析Camera 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师
6、精心整理 - - - - - - - 第 2 页,共 13 页 - - - - - - - - - 首先然我们看一下Camera的定义: class _OgreExport Camera : public MovableObject protected: / Camera orientation, quaternion style Quaternion mOrientation; / Camera position - default (0,0,0) Vector3 mPosition; / Stored versions of parent orientation / position mu
7、table Quaternion mLastParentOrientation; mutable Vector3 mLastParentPosition; / Derived positions of parent orientation / position mutable Quaternion mDerivedOrientation; mutable Vector3 mDerivedPosition; / Camera y-direction field-of-view (default 45) Real mFOVy; / Far clip distance - default 10000
8、 Real mFarDist; / Near clip distance - default 100 Real mNearDist; / x/y viewport ratio - default 1.3333 Real mAspect; / Whether to yaw around a fixed axis. bool mYawFixed; / Fixed axis to yaw around Vector3 mYawFixedAxis; / The 6 main clipping planes mutable Plane mFrustumPlanes6; / Orthographic or
9、 perspective? ProjectionType mProjType; / Rendering type SceneDetailLevel mSceneDetail;Camera 的主要作用:Camera control、特定的拍摄手法(聚焦等_,这主要是通过改变投影方式的) 、Frustum Cull ,上面的代码中用了三种不同的颜色来表示三种功能的数据结构。 Camera Control用于控制摄影机的轨迹(例如:平移、旋转等,想象一下在拍电影的时候, 摄影机是怎么移动的) ;特定的拍摄手法主要是改变距离来改变成像的大小名师资料总结 - - -精品资料欢迎下载 - - - - -
10、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - (凸透镜成像原理_) ;Frustum Cull 用于剔除在摄影机范围之外的Object,减小渲染压力。View Port 代码定义如下: class _OgreExport Viewport public: protected: Camera* mCamera; RenderTarget* mTarget; / Relative dimensions, irrespective of target dimensions (0.1) flo
11、at mRelLeft, mRelTop, mRelWidth, mRelHeight; / Actual dimensions, based on target dimensions int mActLeft, mActTop, mActWidth, mActHeight; View Port 作用有点难表述,打个比方就是我们看的电影有的是宽银幕的,而有的只是一般银幕。 View Port就类似于这个银幕的大小,不同的View Port可以达到不同的效果。成员变量中还有Camera和 Render Target两个变量,暂时还没有弄清楚其作用,可能是把Camera同 Render Targe
12、t一对一的对应起来吧。 Render Target Render Target 只是一个抽象类, 只包含了Render Target的基本信息, 代码定义如下所示: class _OgreExport RenderTarget public: protected: int mWidth; int mHeight; int mColourDepth; bool mIsDepthBuffered; / Stats StatFlags mStatFlags; Timer* mTimer ; float mLastFPS; float mAvgFPS; float mBestFPS; float mW
13、orstFPS; float mBestFrameTime ; float mWorstFrameTime ; unsigned int mTris; String mDebugText;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - bool mActive; typedef std:mapint, Viewport*, std:less ViewportList; / List of viewports, map on Z
14、-order ViewportList mViewportList; typedef std:vector RenderTargetListenerList; RenderTargetListenerList mListeners; 代码中包括了三个基本信息:Render Target 的尺寸、渲染的Fps(frame per second、Listener。下面看一下两个子类定义:Render Window 和 Render Texture。 class _OgreExport RenderTexture : public RenderTarget protected: / The text
15、ure that gets accesses by the rest of the API. Texture * mTexture; class _OgreExport RenderWindow : public RenderTarget protected: bool mIsFullScreen; int mLeft; int mTop; 上面两个类的定义中,不同的target又不同的特性,当纹理作为target的 时候必须有一张纹理作为target ,所以包含了成员变量(Texture m_Texture )。下面让我们来看一下更具体的Render Target的定义: class D3D
16、9RenderWindow : public RenderWindow protected: HWND mExternalHandle; / External Win32 window handle HWND mHWnd; / Win32 Window handle HWND mParentHWnd; / Parent Win32 window handlebool mActive; / Is active i.e. visible bool mReady; / Is ready i.e. available for update bool mClosed; static LRESULT CA
17、LLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - - - - - - / - / DirectX-specific / - / Pointer to D3DDriver encapsulating Direct3D driver D3D9Driver* mpD3DDriver; / Pointer to the
18、 3D device specific for this window LPDIRECT3DDEVICE9 mpD3DDevice; D3DPRESENT_PARAMETERS md3dpp; LPDIRECT3DSURFACE9 mpRenderSurface; LPDIRECT3DSURFACE9 mpRenderZBuffer;到上面这个代码我们就比较熟悉了吧_!典型的 Win32 窗口。 可能我们还有个疑问,怎么把Object 渲染到 Window 上?Render System 现在我们可以看一下Render System 的定义了: class _OgreExport Render
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Ogre的渲染系统 2022 Ogre 渲染 系统
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内