NxOgre教程的简单示例

来源:互联网 发布:手机上网络时间不对 编辑:程序博客网 时间:2024/04/29 18:27

是在是对NxOgre感觉很无奈,这些天每天在英文网站上转悠,可是却没有多大的收获。好不容易找到一篇关于NxOgre教程的简单示例,拿过来大家一起分享下,希望对大家有所帮助。

关于安装什么的就不多说了,因为网上有很多关于安装的只要步骤正确,一路下来基本没什么问题。切入正题---------------------

在说NxOgre之前我们先得了解下Physx,当需要在世界里创建Actor需要使用Params创建世界。

World* mWorld = new World("log: yes, time-controller: ogre");

//Params类

PhysXParams params;
params.mLog = true;
params.mTimeController = PhysXParams::TC_Ogre;
World* mWorld = new World(params);
第一个函数的参数是创造世界使用params字符串,第二类。 使用字符串params更为容易,但是有时你可能需要使用类的参数。这个名字每个Stringparams需要是其C + +等效的名称:它会转换为小写的“m”。

例如:

mLog -> "log"
mTimeController -> "time-controller"
mImplictSweepCacheSize -> "implicit-sweep-cache-size"

传递的值为String Param是大同小异,在C + +的整数和其他基本类型的所有行为以同样的方式。唯一的限制是一个逗号不能是字符串的一部分,因为它被认为是前params的结束和另一个开始。

"integer: 4"
"bool: true"
"bool: no"
"floating-point: 4.3"
"double: 4.4323"
"string: This is a string name."
"vector3: 1 2 3"
"quaternion: 1 0 0 0"

NxOgre对象

在NxOgre中只能有一个世界,并且它可以有无限的大小。

在一个世界场景中最多可以有32个场景。

在一个场景中的所有单位被成为Actor。这些可以是房子,盒,字符,或树木等.. .演员可以组织成组。 演员是不可见的,直到你把调试渲染

每名演员有一个或多个形状。当一个形状与来自另一个身体形态发生碰撞,它需要知道如何作出适当的反应。此行为是指一条它们构成了一个形状的材料的几个属性。还有就是所谓的机构。这是一个演员和Ogre sceneNode在一个对象。机构是可见的。

初始化NxOgre对象:

NxOgre的初始化是很容易的,你需要创建主要的目的'世界',Ogre时间控制器是意味着Ogre会关心时机,记录是可选的。

NxOgre::World* mNxWorld = new NxOgre::World("time-controller:ogre, log:yes");
然后创建第一个场景。可是使用无限地板,或者设定比重(yes/no/0 -9.788 0).Ogre被用来作为渲染器和重力是默认启用的。

NxOgre::Scene* mNxScene = mNxWorld->createScene("NxOgreScene", mSceneMgr, "gravity:yes, floor:yes, renderer:ogre");
还有一个方便的工具,称为调试渲染。你可以用他来使Actor可见,只写:

mNxWorld->createDebugRenderer(mSceneMgr);

形状:

NxOgre Evrything是构建形状,最小的分子。有7种形状:

1.立方体;

2.球;

3.胶囊;

4.地面;

5.凸;

6.TriangleMesh;

7.地形;

你可以时间大部分来自这些类的任何东西。每个形状具有相同的初始化,例如立方体:

new Cube(1,"");

这里的最后一个参数是一个ShapeParam。另一个是指定的形状。如果你不使用ShapeParam您不需要使用“”。

创建Actor:

请记住,演员是不可见的,直到你打开调试渲染器或使用远程调试。

创建非常简单:

Actor* actor = mNxScene->createActor(name,shape,positon,params);

name:Actor的名字是唯一的名称。

shape:形状。

positon:位置。

params:

       1.质量(mass):10.

       2.密度(density):10 -如果u设置最大规模为零NxOgre将计算密度和大规模使用量.

       3.组(group):组名.

       4.静(static):yes-让Actor是静态的,它不能被移动或改变位置,你也可以获取它,可以设置的

        质量和密度为0。

这是一个简单的盒,名为“box”,离地面5个单位,其质量为10.

Actor* actor = mNxScene->createActor("box", new Cube(1), Vector3(0,5,0), "mass:10");

创建机构:

组是一个用Actor和ogre SceneNood结合起来的。需要创建一个SceneNood:

Ogre::Entity *ent = mSceneMgr->createEntity( "box_entity", "cube.mesh" );
ent->setMaterialName("Examples/10PointBlock");
Ogre::SceneNode *boxNode= mSceneMgr->getRootSceneNode()->createChildSceneNode( "box_node" );
boxNode->attachObject( ent );

在这里需要设置NodeRenderableParams

NodeRenderableParams nrp;
nrp.setToDefault();
nrp.mIdentifierUsage = NxOgre::NodeRenderableParams::IU_Use;
nrp.mIdentifier = boxNode->getName();

最后最容易的就是营造身体各个部位使用createBody(名字,形状,nrp,actorparams)

NxOgre::Body *body = mNxScene->createBody("box_body",new Cube(1),Vector3(0,10,0),nrp,"mass:10");

创造串行盒:

每个方块中必须有唯一的名称来工作。这一点并不难,只需添加变量,控制创建若干机构。例如,你可以创造自己的创造框功能:

void createBox(Vector3 pos,float scale = 1) { // this is a scale between Ogre and NxOgre // for example if u set scale to 5 it will be 0.1 in Ogre and 10 in NxOgre static const Real mesh_scale = 0.02; static const Real physics_scale = 2.0; // create a name for object String name = "Box_" + StringConverter::toString(createdObjects); // incrase number of objects createdObjects++; // [OGRE] create box, set material and scale it Ogre::Entity *E = mSceneMgr->createEntity( name+"_entity", "cube.mesh" ); E->setMaterialName("Examples/10PointBlock"); Ogre::SceneNode *sn = mSceneMgr->getRootSceneNode()->createChildSceneNode 
 ( name+"_node" ); sn->attachObject( E ); sn->scale( Vector3::UNIT_SCALE * mesh_scale * scale ); // create node renderable parms for body NodeRenderableParams nrp; nrp.setToDefault(); nrp.mIdentifierUsage = NxOgre::NodeRenderableParams::IU_Use; nrp.mIdentifier = sn->getName(); // create body (name,shape,position,node rednderable params,actor
 params) // actor params is for example mass NxOgre::Body *body = mNxScene->createBody(name+"_body",new Cube
 (scale*2),pos,nrp,"mass:10"); }

 

 

原创粉丝点击