NxOgre 笔记02
来源:互联网 发布:linux bind 编辑:程序博客网 时间:2024/05/03 21:41
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);
教程原文
http://www.ogre3d.org/wiki/index.php/BloodyMess_Tutorial_2
- NxOgre 笔记02
- NxOgre 笔记02
- NxOgre 笔记
- NxOgre 笔记01
- NxOgre 笔记03
- NxOgre 笔记04
- NxOgre 笔记05
- NxOgre 笔记07
- NxOgre 笔记01
- NxOgre 笔记03
- NxOgre 笔记04
- NxOgre 笔记05
- NxOgre 笔记07
- NxOgre
- NxOgre编译
- 关于Nxogre
- NxOgre经验总结
- NxOgre编译备忘
- WinCE 6.0 R2 离线安装文件下载地址
- NxOgre 笔记01
- 古诗接力
- 转:ConcurrentHashMap之实现细节
- hello csdn
- NxOgre 笔记02
- 独立思考
- 病毒查杀的一般方法
- 气象万千!
- ORACLE 索引原理
- COM技术入门基础知识
- 反射备忘
- 求:html注册界面加功能
- 逻辑读和物理读