CEGUI0.7.1的安装到Ogre 1.7.4里

 

如果ogre已经安装好,参考的网址主要是 民警小刘的 两篇 , 安装的和修改的各一篇。

http://liusir.name/cegui0-7-1-installation.html搞了小半天, 是。lua下的路径没设置对。  也因为自己对ogre不熟悉,OGRE源码编译的OIS在OgreMain里,1.74版本OGRE OIS都在INclude里(源码编译的ogre有OgreMain,sdk的没有)。

http://liusir.name/ogre1-7-1-changes-in-the-use-of-cegui.html

进入C:\OGRESDK\CEGUI-0.7.1\projects\premake

用记事本打开目录下的config.lua,

建议用查找的方法,找到下面的这些变量,修改为下面的

   OGRE_PATHS = { "C:\OGRESDK\ogre-v1-7-0 ", "OgreMain/include", "lib" }

   OIS_PATHS = { "C:\OGRESDK\ogre-v1-7-0 ","Dependencies/include/OIS", "lib" }大家注意这里面的斜杠,方向是不一样的


OGRE_PATHS = { "E:\OGRE\OgreSDK_vc9_v1-7-4", "include/OGRE", "lib" }
OIS_PATHS = { "E:\OGRE\OgreSDK_vc9_v1-7-4", "include/OIS", "lib" }

找到CEGUI_OLD_OIS_API变量,修改为false

找到OGRE_RENDERER变量,修改为true

  找到SAMPLES_OGRE变量,修改为true

还有一点非常重要, CEGUI里的 datafiles 需要拷贝到 Ogre里, 其实只要ogre  bin里resource.cfg路径设置对就行,来载入datefiles

我是直接在resource.cfg里添加:


[Imagesets]
FileSystem=E:/OGRE2013/Ogre_Src_v1-7-4/datafiles/imagesets

[Fonts]
FileSystem=E:/OGRE2013/Ogre_Src_v1-7-4/datafiles/fonts

[Schemes]
FileSystem=E:/OGRE2013/Ogre_Src_v1-7-4/datafiles/schemes

[LookNFeels]
FileSystem=E:/OGRE2013/Ogre_Src_v1-7-4/datafiles/looknfeel

[Layouts]
FileSystem=E:/OGRE2013/Ogre_Src_v1-7-4/datafiles/layouts


检测对不对:

#include <CEGUISystem.h>   
#include <CEGUISchemeManager.h>   
//#include <OgreCEGUIRenderer.h>   
#include <RendererModules/Ogre/CEGUIOgreRenderer.h>
#include "ExampleApplication.h"   


class MouseQueryListener : public ExampleFrameListener, public OIS::MouseListener   
{   
public:   


	MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer)   
		: ExampleFrameListener(win, cam, false, true), mGUIRenderer(renderer)   
	{   

		mCurrentObject = NULL;   
		mLMouseDown = false;   

		mSceneMgr = sceneManager;

		mMouse->setEventCallback(this); // 注册鼠标监听器,方便得到鼠标事件.

		mRaySceneQuery = mSceneMgr->createRayQuery(Ray()); // 创建射线场景查询     
	} 

	~MouseQueryListener()   
	{      
		mSceneMgr->destroyQuery(mRaySceneQuery);  // 销毁射线场景查询指针. 
	}   
	bool frameStarted(const FrameEvent &evt)   
	{   		
		// 调用ExampleFrameListener::frameStarted方法。如果它返回false,则我们也会返回false。   
		if (!ExampleFrameListener::frameStarted(evt))   
			return false;   

		return true;   
	}   


	bool mouseMoved(const OIS::MouseEvent &arg)   
	{   
		// 鼠标移动,更新CEGUI,调用后,鼠标指针就可以移动了   
		CEGUI::System::getSingleton().injectMouseMove(arg.state.X.rel, arg.state.Y.rel);   
		return true;   
	}   
	bool mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id)   
	{   
		// 鼠标左键按下   
		if (id == OIS::MB_Left)   
		{   
			onLeftPressed(arg);
			mLMouseDown = true;   
		}   
		return true;   
	}   
	bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id)   
	{   
		// 鼠标左键按下   
		if (id == OIS::MB_Left)   
		{   
			onLeftReleased(arg);
			mLMouseDown = false;   
		} 
		return true;   
	}   


	//执行拾取判断的函数************************************************************
	void onLeftPressed(const OIS::MouseEvent &arg)
	{
		if(mCurrentObject)
			mCurrentObject->showBoundingBox(false);

		CEGUI::Point mousePos = CEGUI::MouseCursor::getSingleton().getPosition();
		Ray mouseRay = mCamera->getCameraToViewportRay(mousePos.d_x/float(arg.state.width), 

			mousePos.d_y/float(arg.state.height));
		mRaySceneQuery->setRay(mouseRay);
		mRaySceneQuery->setSortByDistance(true);

		// Execute query
		RaySceneQueryResult &result = mRaySceneQuery->execute();
		RaySceneQueryResult::iterator itr;

		// Get results, create a node/entity on the position
		for ( itr = result.begin(); itr != result.end(); itr++ )
		{
			if (itr->movable && itr->movable->getName().substr(0, 5) != "tile[")
			{
				mCurrentObject = itr->movable->getParentSceneNode();
				break;
			} // if
		} // for

		if(mCurrentObject)
			mCurrentObject->showBoundingBox(true);
	}
	void onLeftReleased(const OIS::MouseEvent &arg)
	{

	}

protected:   
	//   
	// 帧监听器   
	RaySceneQuery *mRaySceneQuery;     // 射线场景查询指针   
	bool mLMouseDown;     // 如果按下鼠标按钮,返回True   
	SceneManager *mSceneMgr;           // 指向场景管理器的指针   
	SceneNode *mCurrentObject;         // 新创建的物休   
	CEGUI::Renderer *mGUIRenderer;     // CEGUI渲染器 

	bool mRobotMode; //当前机器人状态
};   
class MouseQueryApplication : public ExampleApplication   
{   
protected:   
	CEGUI::OgreRenderer *mGUIRenderer;   
	//CEGUI::System *mGUISystem;         
public:   
	MouseQueryApplication()   
	{   
	}   
	~MouseQueryApplication()   
	{   
	}   
protected:   
	void chooseSceneManager(void)   
	{   
		// 创建一个地形场景管理器.   
		mSceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE);   
	}   
	void createScene(void)   
	{   
		// 设定摄像机的参数   
		mCamera->setPosition(40, 100, 580);   

		//待选取的节点
		SceneNode* node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode();
		Entity *ent1 = mSceneMgr->createEntity("ninja", "ninja.mesh");
		node1->attachObject(ent1);
		node1->setPosition(Vector3(100,0,0));

		SceneNode* node3 = mSceneMgr->getRootSceneNode()->createChildSceneNode();
		Entity *ent3 = mSceneMgr->createEntity("robot", "robot.mesh");
		node3->attachObject(ent3);
		node3->setPosition(Vector3(-100,0,0));

		// 启用CEGUI  
	  
	mGUIRenderer = &CEGUI::OgreRenderer::bootstrapSystem();
	CEGUI::SchemeManager::getSingleton().create((CEGUI::utf8*)"TaharezLook.scheme");
	CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseArrow");  
 // CEGUI::Logger::getSingleton().setLoggingLevel(CEGUI::LoggingLevel::Informative);

///new chance	
 //CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme");
 //CEGUI::System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");
 //CEGUI::MouseCursor::getSingleton().setImage("TaharezLook","MouseMoveCursor");

 


	//		CEGUI::SchemeManager::getSingleton().create((CEGUI::utf8*)"TaharezLook.scheme");
// 		CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseArrow");   
	}   
	void createFrameListener(void)   
	{   
		// 绑定监听器   
		mFrameListener = new MouseQueryListener(mWindow, mCamera, mSceneMgr, mGUIRenderer);   
		mFrameListener->showDebugOverlay(true);   
		mRoot->addFrameListener(mFrameListener);   
	}   
};   

int main()
{
	MouseQueryApplication cpp;


	cpp.go();
	return 0;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值