<< Voltar Índice Próxima >>

WORLD E SCENE

World

O mundo(world) é onde estarão todos os outros elementos da NxOgre, como as cenas (Scene), e os atores(Actor), dessa forma é o elemento mais básico.

#include "NxOgre.h"

using namespace NxOgre;

 

No arquivo AplicationListener.h adicione o include acima, para utilizarmos a NxOgre. Não esquecendo do namespace para evitar escrever várias vezes o prefixo dela.

World* world;
Scene *scene;
Body *roboBody;
Actor *cuboActor;
ActorGroup *primGrupo;
ActorGroup *segGrupo;

 

Acrescente também as variáveis que iremos utilizar nos tutoriais, elas serão explicadas mais a frente.

world = new World("use-log: yes, time-controller: ogre");

 

Um mundo é criado com a linha de código acima, onde a string contém informações sobre a criação do mundo. Essa é uma característica da NxOgre, a forma como os parâmetros são passados para um construtor para a criação de um elemento da NxOgre. Existem dois tipos de parâmetros: String Params, onde as informações estão em uma string e Class Params onde os parâmetros serão informados em variáveis que dependeram do tipo do elemento.

No código acima foi utilizado String Params onde cada parâmetro e o seu valor é separado dos demais por uma vírgula. Esses mesmo trecho poderia ser reescrito da seguinte forma abaixo, usando Class Params:

PhysXParams params;
params.mUseLog = true;
params.mTimeController = PhysXParams::TC_OGRE;
world = new World(params);

 

Primeiramente cria-se a variável params, do tipo PhysXParams que contém os parâmetros usados na construção do mundo. Depois busca-se os parâmetros desejados, para o nosso exemplo são, mUseLog e mTimeController. Onde o primeiro define se será criado um arquivo de log para a NxOgre e o segundo define o timer utilizado pela biblioteca para a sua execução. Então a variável é passada como parâmetro no construtor do mundo(World).

Observe que existe uma padronização na mudança da nomenclatura de um parâmetro de String Params para Class Params e vice-versa.

Class Params - String Params
mUseLog - "use-log"
mTimeController - "time-controller"
mIdentifier - "identifier"

Os parâmetros perdem a letra "m" minúscula inicial do nome, e em caso do nome ser constituído por mais de uma palavra, cada uma é separada por um traço(-) em sua forma de string.

Class Params são executados mais rapidamente que String Params pois, a string é ainda é convertida em Class Params e posteriormente é executada. Mas caso a quantidade a ser passada for pequena, então String Params é aconselhado, pois diminui a quantidade de linhas no código. Isso fica a seu critério.

"integer: 15"
"bool: true"
"floating-point: 4.357"
"string: Exemplo de string."
"vector3: 7 25 150"

 

Acima estão alguns exemplos de alguns parâmetros em sua forma de string.

Scene

A cena(scene) é uma pequena porção do mundo onde estará um grupo de elementos da NxOgre como atores(actors). Esses elementos não sofrerão influência de outros contidos em uma cena diferente. Podem ser criadas até 32 cenas diferentes.

scene = world->createScene("cenaNx", "renderer: ogre, controller: accumulator,
    gravity: yes, floor: yes");

 

Uma cena é criada utilizando o método createScene(), em que o primeiro parâmetro é o nome da cena criada. O segundo é a string que contém os parâmetros da cena, o tipo da variável para uma cena em Class Params é SceneParams.

O parâmetro renderer é o renderizardor a ser utilizado, estamos utilizando a Ogre. Gravity define se terá gravidade na cena, o valor padrão é -9.90665 caso o valor do parâmetro seja apenas "yes". Para atribuir um outro valor para a gravidade use um vetor da forma "gravity: 0, -50.5 0", por exemplo. Floor indica se deverá ser criado um piso na cena, o qual estará na posição (0,0,0).

Como a NxOgre é uma biblioteca de física, e não de video como é a Ogre, não aparece piso algum na cena caso você execute o projeto agora. Então para facilitar a visualização da cena posteriormente quando atores forem adicionados a ela, colocaremos um plano que será o piso.

scene_mgr->setSkyDome(true, "Examples/CloudySky", 5, 8);

camera->setPosition(Vector3(150,550,1000));
camera->pitch(Degree(-30));

Plane plane(Vector3::UNIT_Y, 0);

MeshManager::getSingleton().createPlane("ground",
   ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
   2000,2000,20,20,true,1,5,5,Vector3::UNIT_Z);

Entity *entPlano = scene_mgr->createEntity("chao","ground");
SceneNode *nodePlano = scene_mgr->getRootSceneNode()->createChildSceneNode("chaoNode");
nodePlano->attachObject(entPlano);

entPlano->setMaterialName("Examples/Rockwall");

 

Acrescente o código acima no método CarregaMalhas() no arquivo Inicializa.cpp. Em suma ele adiciona um céu(SkyDome) ajusta a posição da câmera e depois cria e configura o plano de forma que seja o piso da cena(para mais informações de como criar um plano veja este tutorial). Compile o projeto e execute-o.

Italo Mendes
italo.ribeiro@gmail.com

<< Voltar Índice Próxima >>