一、显示窗口
第一个项目必然是显示一个黑乎乎的窗口。这样的开始项目写过好几个了,现在做写总结。
1.INCLUDE和LIB的路径设置,主要就那么几个
INCLUDE:1)SDK\include; 2)SDK\boost_1_44;
LIB:1)SDK\boost_1_44\lib 2)SDK\lib\debug(这个项目在debug下编译运行,如果release版就release呗)
2.附加库:OgreMain_d.lib,OIS_d.lib,这个很明显啦,需要debug就debug,release就release。
由于这个项目是基于ExampleApplication的,因此还要包括头文件Ogre\ExampleApplication.h
放上main.cpp的代码:
#include "Ogre\ExampleApplication.h"
class Example1:public ExampleApplication
{
public:
void createScene()
{
}
};
int main(void)
{
Example1 app;
app.go();
return 0;
}
不过这样还不能在VS2008下面运行,会出现一个什么错误。估计是平台差异问题。解决办法:(百度网友health003给出)
程序入口有四种形式
UNICODE Windows为wWinMainCRTStartup
UNICODE Console为wmainCRTStartup
非UNICODE Windows为WinMainCRTStartup
非UNICODE Console为mainCRTStartup
解决方法如下:
依次选择菜单:[项目] -> [XXX属性] -> [配置属性] -> [链接器] -> [高级] 在[入口点]里,写入mainCRTStartup,确定即可.
然后编译通过,复制到SDK\bin\debug下(懒得设置),运行,黑乎乎的窗口。
二、加载模型
接下来就是经典的加载一个模型......这次不是Ogre头了,而是Ogre一枚。
必然是将下面代码放到createScene()中
Ogre::Entity* ent = mSceneMgr ->createEntity("MyEntity", "Sinbad.mesh");
mSceneMgr ->getRootSceneNode() ->attachObject(ent);
不解释。运行后一个小点。没办法,默认镜头离原点比较远。
三、节点
边看边改。下一步就是添加一个节点。
将上面最后一句改为:
Ogre::SceneNode* node = mSceneMgr ->createSceneNode("Node1");
添加:
mSceneMgr ->getRootSceneNode() ->addChild(node);
node ->attachObject(ent);
不解释。
四、父子节点
子节点的位置将在父节点的基础上计算并放置,而不是在世界坐标系中。
将createScene()的代码改为:
Ogre::Entity* ent = mSceneMgr ->createEntity("MyEntity", "Sinbad.mesh");
Ogre::SceneNode* node = mSceneMgr ->createSceneNode("Node1");
node ->setPosition(10,0,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(0, 10, 20);
node2 ->attachObject(ent2);
node2的位置为(10,10,20),而不是(0,10,20)。