【Ogre编程入门与进阶】第六章 相机 灯光 阴影

本文介绍了Ogre3D中的相机、灯光和阴影的使用方法。通过示例展示了如何创建和控制相机,设置视口,以及添加不同类型的灯光,包括定向光、点光源和聚光源。此外,还讲解了如何开启和设置阴影效果,以增强3D场景的真实感。
摘要由CSDN通过智能技术生成

       在上一章中,我们已经学会了如何创建一个最基本的Ogre3D程序,但是那样创建出来的场景未免过于单调,因为它缺少了光照、阴影等等,很多能增强场景真实感的东西我们都还没有加入,因此当你学习这章的时候你会看到更多让你心动的东西,这一章我们将会给你带来一个更加真实的3D场景。

       6.1相机

       对于场景中的摄像机来说,最主要的工作就是定义产生一个视截体用来处理渲染工作。更细致一点地说,它是一个包含“眼睛”所能看到所有内容的“盒子”(我们可以简单认为眼睛存在于视截体四条边所汇聚的点上面)。请参看下图:


Ogre利用这六面来剔除场景中不可见的物体,换句话说,图形硬件使用它裁减掉“盒子外”一定粒度下的几何图形(多边形的级别)。

同时摄像机也是场景中的活动物体,所以它也可以有移动、旋转以及改变位置的操作(视截体也一同被操作)。另外,作为特殊属性,摄像机可以在没有挂接到场景节点的情况下可以直接放置在场景中,也可以不依赖节点进行自身的旋转移动等操作。这其实是一种比较常用的做法,当摄像机被创建之后就已经开始正常的工作了,场景把它配置在世界空间坐标的(0,0,0)位置上,你可以把它移动到任何你希望的位置上去。

       下面我们通过实例程序来看一个在Ogre中相机从创建到工作的过程:

第一步,我们需要一个Ogre基本程序的模板,注意各个包含目录及其库目录等基本的配置(详见上一章具体介绍):

#include <windows.h>

#include "ExampleApplication.h"

 

class Example1 : public ExampleApplication

{

public:

     void createScene()

     {

     }

 

protected:

private:

};

 

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )

{

     Example1 app;

     app.go();

     return 0;

}

第二步,我们向createScene函数体中加入如下代码:

     void createScene()

     {

         Ogre::Entity*ent1 =mSceneMgr->createEntity("ent1","ninja.mesh");

         Ogre::SceneNode*node1 =mSceneMgr->createSceneNode("Node1");

         mSceneMgr->getRootSceneNode()->addChild(node1);

         node1->attachObject(ent1);

     }

编译并运行程序你将会发现一位日本武士站立在黑色的场景中

上面这些都是我们再上一章中介绍过的,现在我们需要向Example1类中新添加一个函数createCamera(),并在其函数体中增加如下代码:

void createCamera()

     {

         mCamera = mSceneMgr->createCamera("Camera1");

         mCamera->setPosition(0,0,200);

         mCamera->lookAt(0,0,0);

mCamera->setNearClipDistance(5);

     }

编译并运行程序,你将会发现人物不能全部显示出来:

这里我们可以调整相机的位置来看到整个人物,把createCamera函数体中的mCamera->setPosition(0,0,200);这一行代码修改为mCamera->setPosition(0,0,500);然后运行程序你将会发现人物现在整个都可以显示出来了,

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值