<< Voltar Índice Próxima >>

ACTOR E BODY

Actor

Um ator(actor) são todos os objetos que irão compor a cena. Eles podem ser de dois tipos. Estáticos(static) onde eles não possuem massa e nem se moverão. Construções ou grandes rochas são exemplos de atores estáticos. Os Dinâmicos(dinamic) são objetos que terão mobilidade na cena, como pessoas, carros, bolas, etc. Esses terão massa, densidade, sofrerão influência da gravidade e de outros atores.

Basicamente a diferença entre atores e corpos(body) na NxOgre é que atores não possuem uma representação visual, ou seja eles irão influenciar na colisão, mas você não os verá. É como o piso criado no tutorial anterior, ele está lá, os objetos irão ficar sobre ele, mas não será visto.

Enquanto que corpos possuem uma representação visual, ou seja, podemos vê-los na cena, usando um SceneNode da Ogre, ou mesmo uma malha(.mesh) diretamente.

NodeRenderableParams vp;
vp.setToDefault();
vp.mIdentifier = "cuboNode";
vp.mIdentifierUsage = vp.IU_Create;
vp.mGraphicsModel = "cube.mesh";
vp.mGraphicsModelScale = NxVec3(1, 1, 1);
vp.mGraphicsModelMaterial = "Examples/CloudySky";

 

Antes de criamos o ator vamos definir o valor dos parâmetros que serão utilizados. A variável é do tipo NodeRenderableParams. A primeira função chamada, setToDefault(), define todos os valores dos parâmetros da variável(vp) com seus valores default.

Em mIdentifier é atribuído o nome do SceneNode, pois na prática, a NxOgre irá criar um SceneNode com o nome passado nesse parâmetro, ou então usará os dados de um SceneNode já criado. Isso é definido no parâmetro mIdentifierUsage onde caso o valor seja IU_Create, um SceneNode será criado e caso seja IU_Use os valores serão de um SceneNode existente com o nome passado em mIdentifier.

O parâmetro mGraphicsModel é a malha do ator. mGraphicsModelScale a escala da malha, não das dimensões do ator. E mGraphicsModelMaterial o material que será aplicado na malha.

cuboActor = scene->createBody(vp.mIdentifier, new Cube(100), Vector3(200,150,50), vp,
    ActorParams("mass: 10"));

 

O ator será criado utilizando o método createBody() pois queremos que ele seja visto na cena. O resultado da função é um corpo que será passado para a variável do tipo actor cuboActor, afim de que possamos ter acesso a esse corpo. Uma outra forma de acesso a esse ator seria através da função getActor() através da cena:

scene->getActor("cuboNode")

O primeiro parâmetro é o nome do corpo, que será o mesmo do SceneNode. O segundo é a forma que será usada para a detecção de colisão. Como a nossa malha é um cubo então usamoa a função Cube(), onde o parâmetro é o valor das dimensões do cubo.

Muitos objetos do mundo real podem ter como sua forma de representação formas simples, uma bola pode ser uma esfera(Sphere) por exemplo. Um tanque poderia ser representado por um cubo ajustando as suas dimensões por exemplo Cube(300, 150, 200).

O terceiro parâmetro é a sua posição, que a NxOgre chama de Pose. O quarto são os parâmetros do NodeRenderable e o quinto são parâmetros do ator, por enquanto apenas definimos a sua massa com o valor 10.

vp.setToDefault();
vp.mIdentifier = "roboNode";
vp.mIdentifierUsage = vp.IU_Use;

roboBody = scene->createBody(vp.mIdentifier, new Cube(25, 25, 25), Vector3(50,200,50), vp,
    ActorParams("mass: 10"));

 

Para exemplificar criamos um ator com os dados do SceneNode do robo. Definimos também um "cubo" como sua forma para colisão. Execute o projeto e observe que os dois objetos irão cair levemente na cena até o piso da NxOgre, que está na mesma localização do plano criado no tutorial passado.

Italo Mendes
italo.ribeiro@gmail.com

<< Voltar Índice Próxima >>