平台: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中加入如下代码:

 #include "BaseApplication.h"

 class MyClass : public BaseApplication
{
public:
MyClass(void) { }
virtual ~MyClass(void) { }
protected:
virtual void createScene(void);
}; void MyClass::createScene(void)
{
// shadow
mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);
mSceneMgr->setAmbientLight(Ogre::ColourValue(0.2f, 0.2f, 0.2f)); // light and light sphere
Ogre::Light* pointLight1 = mSceneMgr->createLight("pointLight1");
pointLight1->setType(Ogre::Light::LT_POINT);
pointLight1->setDiffuseColour(Ogre::ColourValue::White);
pointLight1->setSpecularColour(Ogre::ColourValue::White); Ogre::Entity* sphereEnt = mSceneMgr->createEntity("MyEntity", "sphere.mesh");
Ogre::SceneNode* lightNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("LightNode");
lightNode->attachObject(sphereEnt);
lightNode->setScale(0.1f,0.1f,0.1f);
sphereEnt->setMaterialName("BaseWhiteNoLighting"); Ogre::Vector3 lightPosition(,,);
lightNode->setPosition(lightPosition);
pointLight1->setPosition(lightPosition); // Ninja
Ogre::Entity* entNinja = mSceneMgr->createEntity("Ninja", "ninja.mesh");
entNinja->setCastShadows(true);
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entNinja); // ground
Ogre::Plane plane(Ogre::Vector3::UNIT_Y, );
Ogre::MeshManager::getSingleton().createPlane("ground", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
plane, , , , , true, , , , Ogre::Vector3::UNIT_Z);
Ogre::Entity* entGround = mSceneMgr->createEntity("GroundEntity", "ground");
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entGround);
entGround->setMaterialName("Examples/Rockwall");
entGround->setCastShadows(false); // set camera position
mCamera->setPosition(,,-);
mCamera->lookAt(,,);
} int main(int argc, char *argv[])
{
// Create application object
MyClass app; try{
app.go();
}
catch( Ogre::Exception& e ){
std::cerr << "An exception has occured: " <<
e.getFullDescription().c_str() << std::endl;
}
return ;
}

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

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

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

$(OGRE_HOME)\include
$(OGRE_HOME)\include\OIS
$(OGRE_HOME)\include\OGRE
$(OGRE_HOME)\include\OGRE\Overlay
$(OGRE_HOME)\boost

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

$(OGRE_HOME)\lib\$(Configuration)
$(OGRE_HOME)\boost\lib

现在知道环境变量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

OGRE 1.9 的第一个程序(OGRE HelloWorld程序)的更多相关文章

  1. OGRE启动过程详解(OGRE HelloWorld程序原理解析)

    本文介绍 OGRE 3D 1.9 程序的启动过程,即从程序启动到3D图形呈现,背后有哪些OGRE相关的代码被执行.会涉及的OGRE类包括: Root RenderSystem RenderWindow ...

  2. Android开发-之第一个程序:HelloWorld!

    小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...

  3. 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立

    原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...

  4. JAVA的命名方式 ,JAVA的第一个打印时间的程序

    本文内容来自:Java的命名方式 ,Java的第一个打印时间的程序 – Break易站 1. Java的命名方式 Java采用了一种全新的方法来避免上述所有问题·为了给一个类库生成不会与其他名字混淆的 ...

  5. C#语言————第一章 第一个C#程序

    第一章    第一个C#程序 ******************C#程序***************     ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...

  6. 第一个真正的 GUI 程序——Tkinter教程系列02

    第一个真正的 GUI 程序--Tkinter教程系列02 前言 欢迎光临我的个人博客 chens.life Tk 系列教程: Tkinter教程系列01--引言和安装Tk 我们将编写一个英尺和米的转换 ...

  7. C语言学习002:第一个完整的C程序代码

    #include <stdio.h>//引用相关的外部库,stdio.h包含了终端读写数据的代码 //程序入口,程序通过main函数的返回值判断程序是否运行成功,0表示成功,非0表示程序运 ...

  8. ogre3D学习基础2 -- 顶点程序与片断程序

    三.顶点程序与片断程序 顶点或者片断程序定义可以被多个材质使用,唯一的前提条件是必须在引用它之前在材质的渲染通路部分中定义. 一个低级顶点程序示例如下: vertex_program myVertex ...

  9. TCP/IP详解之:Ping程序、Traceroute程序

    Ping程序: ping程序是通过发送一份ICMP回显请求报文(即ICMP报文的一种,其类型为8,代码为0)给主机,并等待返回ICMP回显应答 来测试另一台主机是否可达. ping程序不用经过传输层, ...

随机推荐

  1. Excel 行列转置 解决竖向拉,字母跟着递增的问题

    今天工作中遇到需要将Excel行列转置涉及到的数据单元格一共几千个 查询网上说可以通过复制粘贴单元格,粘贴选项中转置一项实现,但是所涉及的sheet页中,数据格式和单元格格式各不一样,转置失败! 怎么 ...

  2. LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2

    https://leetcode.com/problems/longest-palindromic-substring/ manacher算法相关:http://blog.csdn.net/ywhor ...

  3. leetcode6

    好吧,今天晚上赶项目确实是做不了三道题目了,最近项目在网络编程方面有些进步,学到了东西,有时间再积累下来,很深的体会就是,和别人一起写代码,虽然蛋疼但是比自己一个人写要好点,不过发现自己对链表和排序什 ...

  4. 机器学习相关的Awesome系列

    Index Awesome 备注 1 Awesome Machine Learning 机器学习资源大全中文版 2 Awesome Artificial Intelligence 人工智能 3 Awe ...

  5. AngularJS的学习笔记(二)

    只给自己看的. AngularJS 表达式 angularjs 使用表达式将数据绑定到html中. AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表 ...

  6. ubuntu 13.04 telnet 详细配置

    1. sudo vi /etc/xinetd.d/telnet并加入以下内容:# default: on# description: The telnet server serves telnet s ...

  7. js拖拽效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. JavaScript控制类名(className属性)

    语法:object.className =classname   (注意大小写) 作用:获取元素的class属性,为网页内的某个元素指定一个CSS样式来更改该元素的外观 示例: <!DOCTYP ...

  9. 常见ES6新属性

    ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=& ...

  10. IOS自定义日历控件的简单实现(附思想及过程)

    因为程序要求要插入一个日历控件,该空间的要求是从当天开始及以后的六个月内的日历,上网查资料基本上都说只要获取两个条件(当月第一天周几和本月一共有多少天)就可以实现一个简单的日历,剩下的靠自己的简单逻辑 ...