Gamebryo帧渲染系统详解
作者:volfmath 日期:2010-03-31
好,首先再次强调下帧渲染系统是逻辑系统,严格上跟渲染没有任何关系,就是说如果你可以绕开帧渲染系统,一样可以画出想描画的东西,只不过GB这样做的目的是使得渲染层次更加清晰,灵活了。
OGRE也有类似的概念,在Ogre中也可以定义自己的层,但是由于没有帧渲染系统,所以层次上不如Gamebryo灵活,方便易用。
RenderFrame 和RenderStep我就不再赘述了,因为这两个概念很简单,里面也没有实质性的内容。你想怎么理解都可以,前者是后者的超集,Step又是Click的超集。
详细说一下RenderClick和RenderView。RenderView可以理解成我们所要描画的物件。RenderView里有AppendScene这样的接口,就可以把所有想View的东西都挂接上去。RenderView里还有个重要的工具叫做Culler,Culler是做什么用的呢?是负责裁剪的,这里的裁剪是逻辑上的裁剪,就是精确到几何体级别的裁剪。(注意不是三角面级别的)。Culler是作为Processor被加进去的,就是一个裁剪的过程。Culler提供了一些抽象接口,来满足用户的自定义裁剪。就是说你可以根据你的需要来在渲染前进行裁剪。
下面说到RenderClick,RenderClick精确的字面意思就是一次描画,这个类的功能也基本是这样,知道了要画的东西,但是要画到什么上去就需要RenderClick了,每个RenderClick对应了一个RenderTarget。就是要描画的地方。一个描画的过程是这样的,首先找到RenderTarget就是要描画的地方,因为如果是后期特效,有时候会有多个RenderTarget。
Ogre中透明实现方法
作者:volfmath 日期:2008-03-06
Ogre教程第四篇
作者:volfmath 日期:2007-12-18
在这篇教程里将说一些跟输入输出相关的东西。提到输入输出就需要提出一个帧监听(FrameListener)的概念。在Ogre中我们可以注册一个类去接收消息当一帧被渲染到屏幕之前和之后。FrameListener接口定义两个函数:
分别是:
bool frameStarted(const FrameEvent& evt)
bool frameEnded(const FrameEvent& evt)
在Ogre的主循环(Root::startRendering)中,首先是Root object在所有注册的FrameListeners中调用frameStarted方法,然后Root object会渲染一帧,最后调用frameEnded方法。这样直到有任意一个FrameListerner的frameStarted后者frameEnded函数返回flase为止。这些函数的返回值的主要意思是“保持渲染”。如果返回否程序就会退出。
Ogre教程第三篇
作者:volfmath 日期:2007-12-10
这篇教程将讲解摄像机和视口的一些简单用法。
在3D游戏中摄像机是一个非常重要的东西。他用来观察所有的场景。摄像机有点类似一个场景节点,可以设置它的位置,以及对他进行偏移、滚动、倾斜等操作。摄像机的位置是跟父节点有关的。视口可以理解为使摄像机和场景的一个交集。当我们需要处理多个摄像机来观察场景时,视口就显得非常重要了,比如在console game中两个人或者几个人可以互不干扰的观察者同一个场景的不同角度,就需要这样的技术了。
下面我们要利用ogre里面的一些方法来建立一个视口,并把它提供给正在使用的摄像机。
//创建一个视口 Viewport* vp = mWindow->addViewport(mCamera); //下面要做的是设置背景颜色,为了以后处理光照,在这里我把背景设置成黑色 vp->setBackgroundColour(ColourValue(0,0,0)); // 设置摄像机的纵宽比,这是对4/3屏幕而言的一个默认值,如果是16/9的屏幕需要改变纵宽比。 mCamera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
Ogre教程第二篇
作者:volfmath 日期:2007-12-04
首先我们需要继承ExampleApplication。
#include "ExampleApplication.h"
class MyApplication : public ExampleApplication
{
protected:
public:
MyApplication()
{
}
~MyApplication()
{
}
protected:
void createScene(void)
{
}
};
目前我们什么也没有做,只是完完全全继承了ExampleApplication里所有的东西,如果你编译通过后,在运行的时候可以用WASD键移动,鼠标来转镜头,ESC键来退出程序。
接着要做一些具体的工作了。在场景中添加实体,以及灯光等。
setAmbientLight( ColourValue( 1, 1, 1 ) );//设置环境光(以后会详细说) Entity *ent1 = mSceneMgr->createEntity( "Robot", "robot.mesh" ); //创建实体 SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" ); //设置场景节点 node1->attachObject( ent1 );
设置环境光的时候直接设置了白色(红绿蓝都是1),createEntity有两个参数,第一个参数是给创建实体的一个唯一标识,第二个参数是具体使用的实体模型。这样就在屏幕上显示了一个机器人。
Ogre教程第一篇
作者:volfmath 日期:2007-12-04
本章将介绍Ogre中场景管理器组织结构以及实体和场景管理的一些知识。
众所周知场景管理器是游戏中最重要的部分之一,可以毫不夸张的说是整个游戏的基石。记住所有在屏幕上显示的东西都是由场景管理器来管理的,当你添加物体时,场景管理器要了解他们的位置,当你添加摄像机(Camera)来观察场景是,场景管理器也要了解他们。当你添加平面(Plane),布告牌(billboard),灯光(light)等等等等,场景管理器都要了解他们。
Ogre教程第零篇
作者:volfmath 日期:2007-12-04
由我们翻译的OGRE官方出版的书辑<Pro OGRE 3D Programming>以及<ogre 1.4.0 Manual>已经集合成册,你可以在我们的开源社区开放资源地带中下载到。同时在那里你可以下载到我们利用OGRE做的一些开源项目。






![Validate my RSS feed [Valid RSS]](valid-rss.png)
![Validate my Atom 1.0 feed [Valid Atom 1.0]](valid-atom.png)
