• OGRE 1.9 的第一个程序(OGRE HelloWorld程序)


    平台:win7, VS2010

    先看运行结果吧:

    1. 安装OGRE

    下载OGRE SDK 1.9,解压,放在你喜欢的地方,在OGRE SDK文件加下创建“OGRE_HOME.bat.bat”文本文件,添加如下脚本:

    setx OGRE_HOME %CD%

    双击运行“OGRE_HOME.bat.bat”,该操作定义环境变量OGRE_HOME值为OGRE SDK目录,该环境变量将在VC++工程中使用。

    2. 下载BaseApplication

    到这个地方下载Tutorial Framework 1.9 - (Windows Line-endings):

    http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Ogre+Wiki+Tutorial+Framework

    这是OGRE为入门者准备的基本示例程序,给我们写好了初始化OGRE的代码(BaseApplication.cpp, BaseApplication.h)。

    3. 创建VC++工程

    step 1:控制台项目(空项目),将上一节下载的BaseApplication.cpp, BaseApplication.h拷贝到项目文件夹里,并添加到项目中。添加新源文件main.cpp,main.cpp中加入如下代码:

     1 #include "BaseApplication.h"
     2 
     3 class MyClass : public BaseApplication
     4 {
     5 public:
     6     MyClass(void) { }
     7     virtual ~MyClass(void) { }
     8 protected:
     9     virtual void createScene(void);
    10 };
    11 
    12 void MyClass::createScene(void)
    13 {
    14     // shadow
    15     mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);
    16     mSceneMgr->setAmbientLight(Ogre::ColourValue(0.2f, 0.2f, 0.2f));
    17 
    18     // light and light sphere
    19     Ogre::Light* pointLight1 = mSceneMgr->createLight("pointLight1");
    20     pointLight1->setType(Ogre::Light::LT_POINT);
    21     pointLight1->setDiffuseColour(Ogre::ColourValue::White);
    22     pointLight1->setSpecularColour(Ogre::ColourValue::White);
    23 
    24     Ogre::Entity* sphereEnt = mSceneMgr->createEntity("MyEntity", "sphere.mesh");
    25     Ogre::SceneNode* lightNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("LightNode");
    26     lightNode->attachObject(sphereEnt);
    27     lightNode->setScale(0.1f,0.1f,0.1f);
    28     sphereEnt->setMaterialName("BaseWhiteNoLighting");
    29 
    30     Ogre::Vector3 lightPosition(0,500,150);
    31     lightNode->setPosition(lightPosition);
    32     pointLight1->setPosition(lightPosition);
    33 
    34     // Ninja
    35     Ogre::Entity* entNinja = mSceneMgr->createEntity("Ninja", "ninja.mesh");
    36     entNinja->setCastShadows(true);
    37     mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entNinja);
    38 
    39     // ground
    40     Ogre::Plane plane(Ogre::Vector3::UNIT_Y, 0);
    41     Ogre::MeshManager::getSingleton().createPlane("ground", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
    42         plane, 1500, 1500, 20, 20, true, 1, 5, 5, Ogre::Vector3::UNIT_Z);
    43     Ogre::Entity* entGround = mSceneMgr->createEntity("GroundEntity", "ground");
    44     mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entGround);
    45     entGround->setMaterialName("Examples/Rockwall");
    46     entGround->setCastShadows(false);
    47 
    48     // set camera position
    49     mCamera->setPosition(100,200,-300);
    50     mCamera->lookAt(0,100,0);
    51 }
    52 
    53 int main(int argc, char *argv[])
    54 {
    55     // Create application object
    56     MyClass app;
    57 
    58     try{
    59         app.go();
    60     }
    61     catch( Ogre::Exception& e ){
    62         std::cerr << "An exception has occured: " <<
    63             e.getFullDescription().c_str() << std::endl;
    64     }
    65     return 0;
    66 }

    添加好之后,工程是这个样子的:

    step 2:添加包含目录和库目录

    项目上右键属性“配置属性 >> VC++目录 >> 包含目录”所有配置下添加如下项:

    $(OGRE_HOME)include
    $(OGRE_HOME)includeOIS
    $(OGRE_HOME)includeOGRE
    $(OGRE_HOME)includeOGREOverlay
    $(OGRE_HOME)oost

    “配置属性 >> VC++目录 >> 库目录”所有配置下添加如下项::

    $(OGRE_HOME)lib$(Configuration)
    $(OGRE_HOME)oostlib

    现在知道环境变量OGRE_HOME的用途了吧。

    step 3:添加库文件

    项目上右键属性“配置属性 >> 链接器 >> 输入 >> 附加依赖项”Debug配置下添加如下项:

    OgreMain_d.lib
    OIS_d.lib
    OgreOverlay_d.lib

    Release配置下添加如下项:

    OgreMain.lib
    OIS.lib
    OgreOverlay.lib

    这个时候编译项目已经可以成功编译了,但运行不了,因为没有运行环境(.dll文件,资源文件)。在Release下编译,将编译出的helloOGRE.exe文件拷贝到OGRE_HOME/bin/Release下,双击运行,报错如下:

    此时这是因为没有安装D3D,你可以到MSDN下载D3D安装,我们这里用OpenGL(OGRE同支持OpenGL和Direct3D):将OGRE_HOME/bin/Release/plugins.cfg文件的第7, 8两行注释:

    Plugin=RenderSystem_Direct3D9
    Plugin=RenderSystem_Direct3D11

    修改为

    # Plugin=RenderSystem_Direct3D9
    # Plugin=RenderSystem_Direct3D11

    再运行还是不行,通过分析OGRE_HOME/bin/Release/Ogre.log(GORE程序运行产生的日志文件)发现是资源解析的问题。因为之前用OGRE 1.8.1时没问题,可以用OGRE SDK 1.8.1的资源包,具体就是OGRE_HOME/media整个文件夹和OGRE_HOME/bin/Release/resources.cfg文件替换为OGRE SDK 1.8.1(再去官网下载吧)中的相应项,就可以运行了。用“WASD”移动相机,鼠标改变视角,Esc键退出程序。

    step 4:运行环境配置

    因为不想每次运行程序都要手动拷贝,也不想改变OGRE_HOME目录下的文件。这里采取的策略是:将OGRE_HOME/bin和OGRE_HOME/media这两个文件夹都拷贝到VS解决方案文件夹下(OGRE 1.9的OGRE_HOME/bin和OGRE 1.8.1的OGRE_HOME/media),当然bin/debug和bin/release下的plugins[_d].cfg和samples[_d].cfg还是要改,见上一步。工程目录结构目前是这样的:

    另外还要配置工程属性,修改生成目标位置:

    项目上右键属性“配置属性 >> 常规 >> 输出目录”所有配置下修改为“$(SolutionDir)bin$(Configuration)”:

    “配置属性 >> 调试 >> 工作目录”所有配置下修改为“$(TargetDir)”:

    4. 问题解决

    如果程序还是运行不起来,欢迎给我留言。另外可以查看/bin/Release/Ogre.log(Release版本),搜索“error”,查看错误信息。

    5. 参考文献

    http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Setting+Up+An+Application+-+Visual+Studio

    http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Basic+Tutorial+1&structure=Tutorials

       

  • 相关阅读:
    iOS 根据生日计算生肖
    iOS 生日计算星座
    iOS App设置icon,启动图
    iOS UITextFiled基本解析
    自定义tabbaritem上的badeg
    iOS摄像头和相册-UIImagePickerController-浅析
    C++ 类型转换操作与操作符重载 operator type() 与 type operator()
    c++中的强制转换
    啊里巴巴上市--马云的励志话
    争--转任志强
  • 原文地址:https://www.cnblogs.com/liangliangh/p/3572294.html
Copyright © 2020-2023  润新知