terça-feira, 25 de outubro de 2011

Entities

Uma entidade (em inglês, Entity) é uma instância de um objeto móvel na cena - que pode ser um carro, uma pessoa, um cachorro, uma shuriken, etc. A única assertiva sobre ela é que não possui uma posição fixa no mundo.

Entidades se baseiam em malhas discretas (Mesh) , isto é, coleções de geometria que são independentes, normalmente muito pequenas em relação à escala do mundo virtual em que estão inseridas e representadas por objetos Mesh. Várias entidades podem ser criadas a partir de um mesmo mesh, desde que se deseje realmente criar cópias de um mesmo objeto na cena. As entidades exibidas na figura abaixo, por exemplo, foram criadas a partir do mesmo mesh:



Uma entidade é criada através da chamada ao método SceneManager::createEntity(), em que são passados como parâmetro o nome da entidade e o nome do mesh em que a entidade será baseada (por exemplo: "ogrehead.mesh"). O SceneManager irá assegurar que o mesh é carregado: ele chama o gerente de recursos MeshManager automaticamente. Somente uma única cópia do mesh será carregada.

Entidades não fazem parte da cena até que sejam anexadas a um SceneNode. Anexando entidades a SceneNodes, é possível criar relações hierárquicas complexas entre suas posições e orientações.

Quando um Mesh é carregado, ele tem uma quantidade de materiais (da classe Material) definidos. É possível associar mais que um material a um único mesh - partes diferentes do mesh podem utilizar materiais diferentes. Qualquer entidade criada a partir de um mesh irá automaticamente possuir suas características padrões (dos materiais atribuídos a ele). No entanto, pode-se mudar essa base comum para todas as entidades criando-as com um mesmo mesh mas com diferentes texturas ou outras propriedades divergentes.

Para entender como isso funciona, é necessário ter em mente que cada objeto Mesh é composto por objetos SubMesh, que representam, cada um, uma parte do mesh usando um material. Se um mesh utiliza um único material, então só tem um único submesh.

Quando uma entidade é criada com base em um mesh, ela - possivelmente - é composta por vários objetos SubEntity numa proporção de 1 pra 1 com os objetos SubMesh do mesh em que se baseia. Você pode acessar os objetos SubEntity de uma entidade através da chamada ao método getSubEntity(), da classe Entity. Uma vez que se tem a referência ao objeto SubEntity, pode-se alterar o seu material chamando o método setMaterialName(). Dessa maneira, é possível fazer com que uma entidade desvie dos materiais padrões e criar um visual individual diferente para ela.

Um comentário: