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中加入如下代码:
#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程序)的更多相关文章
- OGRE启动过程详解(OGRE HelloWorld程序原理解析)
本文介绍 OGRE 3D 1.9 程序的启动过程,即从程序启动到3D图形呈现,背后有哪些OGRE相关的代码被执行.会涉及的OGRE类包括: Root RenderSystem RenderWindow ...
- Android开发-之第一个程序:HelloWorld!
小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...
- 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...
- JAVA的命名方式 ,JAVA的第一个打印时间的程序
本文内容来自:Java的命名方式 ,Java的第一个打印时间的程序 – Break易站 1. Java的命名方式 Java采用了一种全新的方法来避免上述所有问题·为了给一个类库生成不会与其他名字混淆的 ...
- C#语言————第一章 第一个C#程序
第一章 第一个C#程序 ******************C#程序*************** ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...
- 第一个真正的 GUI 程序——Tkinter教程系列02
第一个真正的 GUI 程序--Tkinter教程系列02 前言 欢迎光临我的个人博客 chens.life Tk 系列教程: Tkinter教程系列01--引言和安装Tk 我们将编写一个英尺和米的转换 ...
- C语言学习002:第一个完整的C程序代码
#include <stdio.h>//引用相关的外部库,stdio.h包含了终端读写数据的代码 //程序入口,程序通过main函数的返回值判断程序是否运行成功,0表示成功,非0表示程序运 ...
- ogre3D学习基础2 -- 顶点程序与片断程序
三.顶点程序与片断程序 顶点或者片断程序定义可以被多个材质使用,唯一的前提条件是必须在引用它之前在材质的渲染通路部分中定义. 一个低级顶点程序示例如下: vertex_program myVertex ...
- TCP/IP详解之:Ping程序、Traceroute程序
Ping程序: ping程序是通过发送一份ICMP回显请求报文(即ICMP报文的一种,其类型为8,代码为0)给主机,并等待返回ICMP回显应答 来测试另一台主机是否可达. ping程序不用经过传输层, ...
随机推荐
- 一个面试题的解答-----从500(Id不连续)道试题库里随机抽取20道题!
做一个考试系统的项目,现在从试题库里面随机抽取20道题 比如我题库有500道题(ID不连续).题目出现了,如何解决呢,随机抽取! 1,我们先把500道题的id存进一个长度为500的数组. 2,实现代码 ...
- Java parseInt()方法
1.Java parseInt()方法 使用此方法得到的原始数据类型的一个特定的字符串. parseXxx()是一个静态方法,可以有一个参数或两个. java parseInt() 语法: sta ...
- koa框架异步返回值的操作(co,koa-compose)
最近在做demo的时候使用了koa框架,自己做了一个静态服务器,首先判断访问文件是否存在,在回调函数中设置了this.body,run之后,各种404,花了N长的时间把koa-compose和co模块 ...
- IOS开发 - TextField 控件详细
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...
- Liunx下安装jdk
Liunx下安装jdk 1.首先进入ROOT权限 命令 sudo su 输入密码进入 root 权限 2.看下当前liunx 是否存在jdk 环境 ,输入命令 javac,如果存在则会显示对应jd ...
- NodeJs使用asyncAwait两法
async/await使用同步的方式来书写异步代码,将异步调用的难度降低到接近于0,未来必将大放异彩.然而在当下,由于标准化的缓存步伐,async/await尚在ES7的草案中.为了尝先,特试用了下面 ...
- 微信APP支付服务端开发Java版(一)
一.准备工作 去微信开发者中心下载(扫码支付,里面的大部分代码是可以用的) https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11 ...
- java数据结构_笔记(4)_图
图一.概念.图: 是一种复杂的非线性数据结构.图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为:G=(V, E) 其中: V 是顶点的有穷非空集合,E 是 V 中顶点偶对(称为边)的有穷 ...
- Delphi编译的程序如何获取管理员权限
1.制作manifest文件 <?xml version="1.0" encoding="UTF-8" standalone="yes" ...
- 不安装oracle,使用plsql连接oracle
通常企业开发时,数据库是不会在我们本地安装的(废话),所以使用plsql时,没必要的话,我们尽量不去安装oracle,太大了: 接下来说一下本人plsql,不安装oracle的使用步骤: 1.个人本地 ...