继上篇之后网上便很少再有关于NxOgre的博客,大多都是安装之类的。现在NxOgre官方网站也进不去,帮助文档和API更是没有。关于如何添加地形还有事先人物与地形的碰撞很是迷惑,只能一点一点的来写。这两天国外网站也上不了了!以下为创建一个Body的一点记录...
首先准备Ogre的框架:
#include "ExampleApplication.h"
class BloodyMessTutorial2Listener : public ExampleFrameListener
{
public:
BloodyMessTutorial2Listener(RenderWindow *win, Camera *cam)
: ExampleFrameListener(win, cam)
{
mTimeController = TimeController::getSingleton();
}
bool frameStarted(const FrameEvent& evt)
{
mTimeController->advance(evt.timeSinceLastFrame);
return ExampleFrameListener::frameStarted(evt);
}
protected:
TimeController* mTimeController;
};
class BloodyMessTutorial2 : public ExampleApplication
{
protected:
void createScene()
{
}
void createFrameListener()
{
mFrameListener = new BloodyMessTutorial2Listener(mWindow, mCamera);
mRoot->addFrameListener(mFrameListener);
}
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
#else
int main(int argc, char **argv)
#endif
{
// Create application object
BloodyMessTutorial2 app;
try {
app.go();
} catch(Exception& e) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBoxA(NULL, e.getFullDescription().c_str(),
"An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occurred: " << e.getFullDescription();
#endif
}
return 0;
}
#ifdef __cplusplus
}
#endif
添加头文件:
#include <NxOgre.h>
#include <NxOgreOGRE3D.h>
在createScene()方法之中添加:
//设置环境光
mSceneMgr->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f));
//设置摄像机的位置以及视角
mCamera->setPosition(0, 20, 80);
mCamera->lookAt(0, 20, 0);
接下来我们需要声明World和Scene了:
//在BloodyMessTutorial2类中声明
NxOgre::World* mWorld;
NxOgre::Scene* mScene;
然后在createScene()方法之中创建World和Scene:
mWorld = NxOgre::World::createWorld();
//定义Scene类型
NxOgre::SceneDescription sceneDesc;
sceneDesc.mGravity = NxOgre::Real3(0, -9.8f, 0);//设置重力
sceneDesc.mName = "BloodyMessTutorial2";
//创建一个场景,现场可以创建包含实体
mScene = mWorld->createScene(sceneDesc);
然后通过mScene 设置摩擦系数
//以下分别为设置静态和动态的摩擦系数,并且设置还原系数
mScene->getMaterial(0)->setStaticFriction(0.5);
mScene->getMaterial(0)->setDynamicFriction(0.5);
mScene->getMaterial(0)->setRestitution(0.1);
现在我们需要使用OGRE3DRenderSystem,在BloodyMessTutorial2类中声明
OGRE3DRenderSystem* mRenderSystem;
然后在createScene()中定义:
mRenderSystem = new OGRE3DRenderSystem(mScene);
接下来我们就需要创建Body了,在BloodyMessTutorial2类中声明:
OGRE3DBody* mCubeTwo;
然后我们就开始CreatBody。在createScene()中:
//创建Body
mCubeTwo = mRenderSystem->createBody(new NxOgre::Box(1, 1, 1),
NxOgre::Real3(20, 35, 0), "robot.mesh");
//添加一个力。
mCubeTwo->addForce(NxOgre::Real3(-800, -200, 0));
//缩放
mCubeTwo->getEntity()->getParentNode()->setScale(0.1,0.1,0.1);
//创建场景几何
mScene->createSceneGeometry(new NxOgre::PlaneGeometry(0,
NxOgre::Real3(0, 1, 0)), Matrix44_Identity);
好了一个Body创建完毕了!~运行下看看吧!
以上函数参数不做详细介绍,你可以在代码中转到定义看看!
如果各位有关于地形的添加方法敬请发表哦!在这里先谢谢咯!~~~~