<< Voltar Índice Próxima >>

ENTITY E SCENENODE

Entity

Entity(Entidade) é um objeto que pode aparecer na cena, qualquer objeto que possa ser representado por uma malha. Um robô, como nos nossos exemplos, um ninja, uma casa, etc. Alguns elementos que possam parecer entitys não são, como luzes, partículas e câmeras, na verdade são uma espécie de SceneNode(Nó da cena). Quando é necessário manipular alguma característica do modelo como animação ou esqueleto, isso é feito através da entity.

Entity *ent1 = scene_mgr->createEntity("robo","robot.mesh");

 

Uma entidade é criada utilizando a função do SceneManager "createEntity()", em que o primeiro parâmetro é o nome da entity usado para realizarmos alguma referência futura a ela, assim como na câmera esse nome deve ser único, não podem existir duas entitys com nomes iguais. O segundo é o nome da malha a ser utilizada, a qual deve estar em um dos diretórios incluidos no arquivo "resources.cfg", no nosso exemplo é utilizada a malha do robô que vem na Ogre.

O formato de malha utilizado na Ogre é o .mesh, que pode ser obtido fazendo a mudança de outros formatos utilizando vários modeladores, como o 3DStudioMax e o Blender através de plugins encontrados na página da ogre. A maioria dos plugins de exportação já criam juntamente com o arquivo .mesh o arquivo .material que tem as informações das texturas aplicadas ao modelo. Os arquivos .material devem ser colocados na pasta \media\materials\scripts(definido no arquivo "resources.cfg"), para mais informações desses arquivos consulte esta página sobre materiais(materials) do wiki da Ogre.

A Ogre faz uma separação entre os elementos que irão compor a cena, uma parte é a entity que cuida do modelo e a outra é o SceneNode que guarda as informações como posição e direção dos objetos anexados(attach) a ele. Dessa forma não basta criar apenas a entidade se quisermos que o objeto seja visto na cena devemos anexa-lo a um SceneNode.

Abaixo uma pequena lista de sites com malhas free.

artist-3d
tresd1
3d gurukul
3dm³
KatorLegaz
TurboSquid
3D Total
Quality 3D Models
Max Realms
The 3D Studio
3D Links
Digital Animators
The 3D Archive

SceneNode

O SceneNode(Nó da Cena) guarda as informações dos objetos anexados a ele, como entity, luzes, partículas ou outro SceneNode. É através do SceneNode que manipulamos sua posição, orientação e escala por exemplo.

SceneNode *node1 = scene_mgr->getRootSceneNode()->createChildSceneNode("roboNode");

 

Criamos um SceneNode através da linha acima, em que apartir do SceneManager obtemos o SceneNode principal("getRootSceneNode()") e depois criamos um SceneNode filho a qual definimos o nome "roboNode". Observe que todos os SceneNodes criados na cena serão filhos do RootSceneNode direta ou indiretamente.

node1->attachObject(ent1);

 

Para anexarmos um SceneNode a uma Entity para que ele possa aparecer na cena, utilizamos a função "attachObject()" como no trecho de código acima. Um SceneNode pode ter mais de um objeto anexado a ele, por exemplo com o SceneNode do robô anexado a Entity do robô como no nosso código, poderiamos colocar uma luz que ficaria um pouco acima da cabeça do robô.

Para isso criariamos a luz depois anexariamos como filho do SceneNode "roboNode" com uma posição um pouco maior no eixo Y em relação a posição do robô no eixo Y, e quando robô se movimentasse a luz iria acompanha-lo, pois como o SceneNode da luz é filho do SceneNode do robô toda movimentação aplicada ao Nó do robô será aplicada ao filho(luz). Esse conceito de hierarquia será utilizado em um outro tutorial para a criação de uma câmera semelhante a dos MMORPG's como Lineage II e Silkroad.

node1->setPosition(Vector3(-25,0,-200));
node1->setScale(Vector3(1,1,1)); 

 

A função "setPosition()" define a posição X, Y e Z do SceneNode no ambiente 3D através de um vetor e "setScale()" define a sua escala nos 3 eixos. Finalmente depois de algumas explicações, Aperte Ctrl+F5 para compilar e executar o projeto para ver como ele está no momento, se tudo correr sem erros você terá uma imagem como a abaixo quando o programa abrir.


Italo Mendes
italo.ribeiro@gmail.com

<< Voltar Índice Próxima >>