现在的位置: 首页 > 综合 > 正文

Ogre 2011-11-23

2012年05月07日 ⁄ 综合 ⁄ 共 1801字 ⁄ 字号 评论关闭

先贴点代码

#include "http://www.cnblogs.com/include/ogre/ExampleApplication.h"

class MyApplication :public ExampleApplication
{
public:
	void createScene()
	{
		Ogre::Entity* ent = mSceneMgr->createEntity("myentity", "Sinbad.mesh");
		Ogre::SceneNode* node = mSceneMgr->createSceneNode("node");
		node->setPosition(10, 10, 0);
		mSceneMgr->getRootSceneNode()->addChild(node);
		node->attachObject(ent);

		Ogre::Entity* ent2 = mSceneMgr->createEntity("myentity2", "Sinbad.mesh");
		Ogre::SceneNode* node2 = mSceneMgr->createSceneNode("node2");
		node->addChild(node2);
		node2->setPosition(10, 0, 0);
		node2->pitch(Ogre::Radian(Ogre::Math::HALF_PI));
		node2->attachObject(ent2);

		Ogre::Entity* ent3 = mSceneMgr->createEntity("myentity3", "Sinbad.mesh");
		Ogre::SceneNode* node3 = mSceneMgr->createSceneNode("node3");
		node3->setPosition(20, 0, 0);
		node->addChild(node3);
		node3->yaw(Ogre::Degree(90.0f));
		node3->attachObject(ent3);

		Ogre::Entity* ent4 = mSceneMgr->createEntity("myentity4", "Sinbad.mesh");
		Ogre::SceneNode* node4 = mSceneMgr->createSceneNode("node4");
		node4->setPosition(30, 0, 0);
		node->addChild(node4);
		node4->roll(Ogre::Radian(Ogre::Math::HALF_PI));
		node4->attachObject(ent4);
	}
private:
};

int main()
{
	MyApplication app;
	app.go();
	return 0;
}

  

ogre启动时需要载入3个.cfg文件:ogre.cfg, plugins.cfg, resources.cfg。其中ogre.cfg保存了启动ogre时弹出对话框时我们选择的配置信息;plugins.cfg保存了ogre需要载入的插件信息;resources.cfg保存了一些orge启动时需要载入的资源。

mSceneMgr->createEntity(const String& entityName, const String& meshName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME );

第一个参数是实体的名字,不能重复。

创建的实体要渲染出来的话,必须将其挂接到场景节点上。

 

The Ogre Scene Graph

场景图类似于一个树,有一个根节点,然后这个根节点有很多子节点,子节点又可以有很多子节点。若要渲染实体,需将其挂载到根节点或者根节点的子节点上去。

Ogre用的是右手坐标系。

场景节点的操作有位置变换(triple(x,y,z)),旋转(四元数quaternion),缩放(triple(x,y,z))。

需要注意的是:场景节点的变换是相对其父节点的,在其父节点的坐标空间里进行变换的。如果我们对一个父节点进行了变换,那么其所有的子节点都要受这个变换的影响。如果我们把父节点在x轴上移动10个单位,那么其所有的子节点也在x轴上移动10个单位。子节点的最终位置是用其所有父节点的坐标计算出来的。

抱歉!评论已关闭.