下面来学习OGRE 引擎中很重要的几个概念。 Camera和Viewport.
从真实的世界来看,是不存在这两样东西的,真实的世界只有场景(Scene). 而这里OGRE抽象出的两个概念则是模拟观察者(人)的位置和眼睛.
从真实世界来讲,人如果要观察这个世界,首先需要确定自己的位置(在什么地方观察),然后把观察到的景象通过眼睛来传递给大脑。 那么在计算机中,Camera和Viewport就是虚拟这两样东西的.
一个Viewport是对一个Camera所拍摄到的场景的反映。所以说一个Viewport只能绑定一个Camera.
而一个Camera所拍摄到的场景可以通过多个Viewport反映到不同的区域,所以一个Camera则可以绑定多个Viewport.
一个Camera同时只可以拍摄一个场景,所以一个Camera只可以绑定一个场景.
一个场景可以由多个观察者去观察,所以它可以绑定多个Camera.
从代码上来反映问题. 以下是OGRE的伪代码.
Camera * camera1 = scene->CreateCamera("camera1"); (一个camera1 绑定到了scene)
Camera * camera2 = scene->CreateCamera("camera2"); (一个camera2 绑定到了scene)
scene创建了2个Camera对象,即一个场景绑定了多个Camera.
我们可以通过设置Camera的位置,角度等来确定观察者的位置.如:
camera1->SetPosition(Vector3(0,0,100));
camera1->LookAt(Vector3(0,0,0);
camera2->SetPosition(Vector3(0,0,0));
camera2->LookAt(Vector3(-300,0,-300);
Viewport * vp1 = render_win->addViewport(camera1,0,0,0,1,1);
Viewport * vp11 = render_win->addViewport(camera1,1,0.7,0.7,0.3,0.3);
Viewport * vp2 = render_win->addViewport(camera2,2,0,0,0.3,0.3);
这里我们用 vp1和vp11来同时绑定了camera1,不同的只是它们的大小和位置不同而已.
vp2绑定了camera。3个Viewport在render_win上的显示的位置是由他们的Z值决定的。所以顺序是vp1 vp11 vp2.
下面是效果图
从真实的世界来看,是不存在这两样东西的,真实的世界只有场景(Scene). 而这里OGRE抽象出的两个概念则是模拟观察者(人)的位置和眼睛.
从真实世界来讲,人如果要观察这个世界,首先需要确定自己的位置(在什么地方观察),然后把观察到的景象通过眼睛来传递给大脑。 那么在计算机中,Camera和Viewport就是虚拟这两样东西的.
一个Viewport是对一个Camera所拍摄到的场景的反映。所以说一个Viewport只能绑定一个Camera.
而一个Camera所拍摄到的场景可以通过多个Viewport反映到不同的区域,所以一个Camera则可以绑定多个Viewport.
一个Camera同时只可以拍摄一个场景,所以一个Camera只可以绑定一个场景.
一个场景可以由多个观察者去观察,所以它可以绑定多个Camera.
从代码上来反映问题. 以下是OGRE的伪代码.
Camera * camera1 = scene->CreateCamera("camera1"); (一个camera1 绑定到了scene)
Camera * camera2 = scene->CreateCamera("camera2"); (一个camera2 绑定到了scene)
scene创建了2个Camera对象,即一个场景绑定了多个Camera.
我们可以通过设置Camera的位置,角度等来确定观察者的位置.如:
camera1->SetPosition(Vector3(0,0,100));
camera1->LookAt(Vector3(0,0,0);
camera2->SetPosition(Vector3(0,0,0));
camera2->LookAt(Vector3(-300,0,-300);
Viewport * vp1 = render_win->addViewport(camera1,0,0,0,1,1);
Viewport * vp11 = render_win->addViewport(camera1,1,0.7,0.7,0.3,0.3);
Viewport * vp2 = render_win->addViewport(camera2,2,0,0,0.3,0.3);
这里我们用 vp1和vp11来同时绑定了camera1,不同的只是它们的大小和位置不同而已.
vp2绑定了camera。3个Viewport在render_win上的显示的位置是由他们的Z值决定的。所以顺序是vp1 vp11 vp2.
下面是效果图
![](http://dl.iteye.com/upload/attachment/579170/7d6b4854-9a36-3744-b07f-40c7cac4f8aa.jpg)