摘要:
今天按照网上的教程配置CEGUI, 一直运行不了,不明白原因,而后又出现了错误LNK1104: 无法打开文件“OgreGUIRenderer_d.lib”,经过反复检查,排除包含目录问题。 不过可能是教程有点老,我在CEGUI的lib文件夹下发现根本没有这个文件,倒是有个类似的文件CEGUIOgreRenderer_d.lib。原来不同的版本,生成的文件也不同,真是害苦了我们初学者啊总结如下: 首先添加包含目录 .......\include\CEGUI 然后添加 .......\Samples\Common\CEGUIRenderer\include 最后添加.......\S... 阅读全文
摘要:
前几天设置天空盒时一直出问题,现在问题终于解决了,问题来的莫名其妙,走的也莫名其妙。 第一,还是框架,我们依然使用ExampleApplication文件,框架如下 1 #include "ExampleApplication.h" 2 3 class TutorialApplication : public ExampleApplication 4 { 5 protected: 6 public: 7 TutorialApplication() 8 { 9 }10 11 ~TutorialApplication() 12 {13 }14 p... 阅读全文
摘要:
以上一节为蓝本,这里增加一点难度,添加了四个节点,增加键盘控制移动速度,使用bool变量控制是否移动。 第一,要增加键盘控制,那就使用OIS::KeyListener,在监听器里添加一个父类KeyListener,添加成员变量并初始化 其中构造函数的ExampleFrameListener(win,cam,true,false);第三个参数改为true,表示使用带缓冲的键盘输入。 1 MoveDemoListener(RenderWindow *win,Camera *cam,SceneNode *sn,Entity *ent,std::deque &walk) 2 ... 阅读全文
摘要:
学了那么长时间,才学会跑起来。My Ogre,动起来。 第一,还是要把框架搭起来,这里我们用到双端队列deque,前面已经简单介绍过,头文件如下:#include "ExampleApplication.h"#include "deque"using namespace std; 第二,是我们的监听器,继承至ExampleFrameListener,构造函数我们使用五个参数,分别为渲染窗口,摄像机,场景节点,实体,行走路线上的位置坐标。1 MoveDemoListener(RenderWindow *win,Camera *cam,SceneNode * 阅读全文
摘要:
今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是error。1 1>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(216): error C2065: “ColorMatrix”: 未声明的标识符2 1>e:\c++\button_fly2\button_fly2\gdipbutton.cpp(216): error C2146: 语法错误: 缺少“;”(在标识符“HotMat”的前面)3 1>e:\c++\button_fly2\butto 阅读全文
摘要:
看这一节,是为了下一节的使用,在ogre3d里有些操作要使用到deque。C++ Deque(双向队列) 的使用 Deque结合了vector 和list 优缺点,是一种使用简单的容器。 deque 的特点: (1) 随机访问方便,即支持[ ] 操作符和vector.at() ,但性能没有vector 好; (2) 可以在内部进行插入和删除操作,但性能不及list ; (3) 可以在两端进行push 、pop ; (4) 相对于verctor 占用更多的内存。 常用的函数和list的基本相同,除了个别的几个,如 1、创建一个新双向队列 ,构造函数很... 阅读全文
摘要:
最近项目需要实现按钮的动态效果,多方学习,现在终于能实现一些功能了。过程如下: 第一,新建一MFC对话框应用程序。 第二,删除自带按钮,并添加两个按钮,button1,button2,ID为IDB_BUTTON1,IDB_BUTTON2.同时响应鼠标单击按钮事件。如下void Cbutton_fly3Dlg::OnBnClickedButton2()//video2{ // TODO: 在此添加控件通知处理程序代码 MessageBox(L"video2");//这里简单测试一下} 第三,添加位图资源,在资源视图下添加几张图片,如下图 第四,设置按钮参数OwnerDraw为 阅读全文
摘要:
这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头。 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListener,另一个我们也刚学过KeyListener。 好吧,开始。 首先我们声明一个宏,#define CAMERA_NAME "SceneCamera" ,这是我们要使用的摄像机常量,下面要多次使用。 然后我们定义两个全局函数,void setupViewport(RenderWindow *win, SceneManager *curr){ win->removeAll 阅读全文
摘要:
List --- 双向列表 List是线性列表结构,数据查找需要一个接一个,不能直接得到元素地址,检索时间与目标元素的位置成正比。但是插入数据比较快,可以在任何位置插入数据或者删除数据。list特点是: (1)不使用连续的内存空间这样可以随意地进行动态操作; (2)可以在内部任何位置快速地插入或删除,当然也可以在两端进行push和pop 。 (3)不能进行内部的随机访问,即不支持[ ] 操作符和vector.at() ;大多数函数和vector的类似,这里就不解释了,有几个不一样的如下: merge() 合并两个list --- 链接之后会把第二个链表删除掉 void merg... 阅读全文
摘要:
C++STL(Standard Template Library)标准模板库是通用类模板和算法的集合。包含一些标准的数据结构的实现如queues(队列),lists(链表),stacks(栈)等。STL提供了以下三类数据结构的实现: 标准容器类:顺序性容器vector从后面快速插入和删除,直接访问任何元素deque从前面或后面快速插入和删除,直接访问任何元素list双链表,从任何地方快速插入和删除容器适配器statck后进先出queue先进后出priority_queue最高优先级元素总是第一个出列关联容器set快速查找,不允许重复值multiset快速查找,允许重复值map一对多映射,基于. 阅读全文
摘要:
设计模式很多,但是常用的并不多,下面是一些常用的,总结一下,具体内容请Google。1、观察者模式 观察者模式定义了对象之间的一对多关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新。发生改变的对象称之为观察目标,而被通知的对象被称之为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以可以根据需要增加和删除观察者,使得系统更加易于扩展。观察者模式又称为发布-订阅模式。2、装饰者模式 动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。装饰者模式比生成子类更为灵活。3、简单工厂模式 简单工厂模式又称为静态工... 阅读全文
摘要:
用文件来记录 Ogre 系统初始化、运行、结束以及调试信息。使用日志便于我们调试程序。Ogre 日志系统由两个类组成:Log 类与 LogManager。 1、Log类 Log 类的一个对象对应于一个日志文件,log类中含有成员函数logMessage()负责向文件中填入信息。1 void logMessage(const String& message, LogMessageLevel lml = LML_NORMAL); // 第一个参数就是要写入的信息,第二个参数代表这条信息的重要程度,分三种参数值重要程度LML_TIVIAL最低LML_NORMAL一般LML_CRITI... 阅读全文
摘要:
带缓冲的鼠标、键盘操作,这里的鼠标、按键事件会被各自的监听器捕获。其中OIS中定义的两个类MouseListener,KeyListener负责对事件的处理。我们需要使用这两个类的接口。 当一个键被按下时,会触发一个 KeyListener::keyPressed 事件,而当这个键被释放(不再按下)时,KeyListener::keyReleased 事件被触发给所有已注册的KeyListener 类。 鼠标键被按下/释放的函数: MouseListener::mousePressed 和MouseListener::mouseReleased. 它还包含一个 mouseMoved ... 阅读全文
摘要:
要实现键盘,鼠标对场景的控制,首先要帧监听,就是在每一帧的渲染前后对它进行操作。这里的操作没有用到缓冲区,只是简单的直接获取。 1、这些步骤和前面的一样,直接上代码,操作还是在createScene函数里。代码如下: 1 void createScene() 2 { 3 //载入实体 4 mSceneMgr->setAmbientLight(ColourValue(0.25,0.25,0.25));//设置环境色 5 Entity *ent1 = mSceneMgr->createEntity("ninja","ninja.me... 阅读全文
摘要:
这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光。具体内容前面说过,这里就不解释了。 继续在上一章的程序的基础上实现。 1、创建摄像机(Camera) createCamera()函数是继承自ExampleApplication的虚函数,把它实现了。 1 class Example1:public ExampleApplication 2 { 3 public: 4 //..........其他代码 5 virtual void createCamera() 6 { 7 mCamera = mSceneMgr->createCam... 阅读全文