1. 单位声明
NxOgre使用“米-千克-第二 系统”,以米为长度单位,千克为质量单位,秒为时间单位。
2. 初始化代码
2.1 最顶层类World,单实例。最大容纳32个Scene。不同场景之间的物体不能交互。
2.2 每个场景都有很多Actor,这个数目仅受限于你的机器配置。这些Actor在World中表现成一个物理对象,但他们都是不可见的。
想看到他们,需要使用一个Body,一个简单的Actor,它通过RenderSystem渲染到你的屏幕。
BloodyMess内建了几个渲染系统,包括OpenGL和Ogre,但这并不是要限制你创建自己的渲染系统。
2.3 NxOgre的另一个重要元素就是TimeController。它控制着World中的Actor所逝去的时间。
2.4 为了使用NxOgre及其指定的Ogre渲染类,头文件及链接库
#include <NxOgre.h>
#include <NxOgreOGRE3D.h>
NxOgre.lib
NxOgreOGRE3D.lib
2.5 在类的保护区域,声明世界、场景、和渲染系统的变量
NxOgre::World *mWorld;
NxOgre::Scene *mScene;
OGRE3DRenderSystem *mRenderSystem; // 并非属于NxOgre名称空间
2.6 在createScene()函数中初始化世界
mWorld = NxOgre::World::createWorld();
// 通过场景描述符,初始化场景
NxOgre::SceneDescription sceneDesc;
sceneDesc.mGravity = NxOgre::Vec3(0,-9.8f,0);
sceneDesc.mName = "BloodyMessTutorial2";
mScene = mWorld->createScene(sceneDesc);
// 指定一些应用到整个场景的默认物理量
mScene->getMaterial(0)->setStaticFriction(0.5); // 静摩擦系数
mScene->getMaterial(0)->setDynamicFriction(0.5); // 动摩擦系数
mScene->getMaterial(0)->setRestitution(0.1); // 恢复系数
mRenderSystem = new OGRE3DRenderSystem(mScene);
// 添加物体,外形为1x1x1的盒子,位置是Y正方向上20米
OGRE3DBody *mCube;
mCube = mRenderSystem->createBody(new NxOgre::Box(1,1,1),NxOgre::Vec3(0,20,0),"cube.1m.mesh");
2.7 获取运动需要每一帧都在FrameListener中advance我们的TimeController。
NxOgre::TimeController::getSingleton()->advance(evt.timeSinceLastFrame);
2.8 物理交互作用
OGRE3DBody *mCubeTwo;
mCubeTwo = mRenderSystem->createBody(new NxOgre::Box(1,1,1),NxOgre::Vec3(20,35,0),"cube.1m.mesh");
mCubeTwo->addForce(NxOgre::Vec3(-800,-200,0));
// 创建一个地面平面,这是一个actor,有无限尺寸,不能被移动
mScene->createSceneGeometry(new NxOgre::PlaneGeometry(0,NxOgre::Vec3(0,1,0)),Matrix44_Identity);
// 创建一个OGRE渲染的可见平面,因为NxOgre中的actor是不可见的
MovablePlane *plane = new MovablePlane("Plane");
plane->d = 0;
plane->normal = Vector3::UNIT_Y;
MeshManager::getSingleton().createPlane("PlaneMesh",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
*plane,120,120,1,1,true,1,3,3,Vector3::UNIT_Z);
Entity *planeEnt = mSceneMgr->creatEntity("PlaneEntity","PlaneMesh");
planeEnt->setMaterialName("Examples/Rockwall");
SceneNode *mPlaneNode = mSceneMgr->getRootScenNode()->createChildSceneNode();
mPlaneNode->attachObject(planeEnt);
mPlaneNode->scale(100,100,100);
分享到:
相关推荐
《NxOgre_Ogre:构建Ogre与PhysX的桥梁》 在3D游戏开发领域,Ogre和PhysX是两个备受关注的开源库。Ogre是一个强大的3D图形渲染引擎,而PhysX则是一个先进的物理模拟系统。当这两者结合在一起时,可以为游戏带来更为...
NxOgre是一个开源的物理引擎库,用于游戏开发和实时3D模拟,它与流行的3D图形库Ogre紧密集成。版本1.6.3329是该库的一个特定迭代,可能包含了优化和错误修复。这个压缩包包含了源代码以及API文档,使得开发者能够...
【NXogre1.6教程】是一份专为学习和理解NXogre 1.6版本而设计的详细教程,该教程由nxogre的维护者于2011年4月发布。NXogre是一个基于Ogre 3D渲染引擎的开源中间件,它为游戏开发和其他实时3D应用程序提供了C++接口。...
《Ogre-Critter:NxOgre与Ogre的整合桥梁》 在游戏开发和图形渲染领域,Ogre和NxOgre是两个重要的开源库。Ogre是一款强大的3D渲染引擎,广泛应用于实时3D场景的创建,而NxOgre则是针对NVIDIA的PhysX物理引擎的一个...
nxOgre是基于PhysX物理引擎的Ogre接口库,PhysX是由NVIDIA开发的一个高性能的物理模拟引擎。nxOgre使得Ogre用户能够方便地集成物理模拟功能,例如物体的碰撞检测、刚体动力学等。在这个台球游戏中,nxOgre被用于处理...
这个任务不仅要求学生熟悉并掌握一种计算机语言,还要求他们能够运用3D建模工具,如3DMAX,以及游戏引擎,如NXOGRE,来创建游戏场景。 课程设计的主要目标包括提高学生的独立思考和创新能力,以及对游戏程序设计...