Existem por outro lado, algoritmos muito mais eficientes para a detecção de colisão que entretanto acabam por exigir que o programador duplique sua estutura de dados dentro da rotinas da biblioteca que implementa os métodos. Exemplos destas bibliotecas podem ser encontrados em:
SmVR_CObjFromFile *ObjectFromFile = new SmVR_COBJLoader(USE_RAPID);Para a detecção de colisão utiliza-se o seguinte método Collided, conforme o exemplo abaixo:
ObjectFromFile->Load("exemplo.obj");
// Cria um objeto
SmVR_CGeometricObject *Objeto1 = new SmVR_CGeometricObject("Objeto1",ObjectFromFile);
// Cria outro objeto
SmVR_CGeometricObject *Objeto2 = new SmVR_CGeometricObject("Objeto2",ObjectFromFile);
// Coloca os dois objetos no grafo de cena da SmallVR
RootObject->AddChild(Objeto1);
RootObject->AddChild(Objeto2);
// Testa colisão entre os objetos
Objeto1->Collided(Objeto2);
Atenção: A RAPID não permite que sejam feitas escalas nos objetos usados por ela. Se for desejável utilizar objetos com escalas diferentes dos originais, sugere-se que estes objetos tenham sua escala alterada em algum software de modelagem 3D, como o AccuTrans 3D, e então utilizados no ambiente.
Exercício
1: Testando Colisão entre objetos
Copie o arquivo Colisao.cpp, grave-o no
sub-diretório TestFiles.
Copie ainda o arquivo Objetos.zip e descompacte-o no subdiretório
TestFiles/Objetos3D.
Abra o prpjeto da SmallVR e carregue adicione o arquivo Colisao.cpp e compile.
Modifique o programa de maneira a testar se há ou
não colisão entre o
sofá e o piso. Como sugestão, coloque teclas para mover
o sofá e imprima na tela se há um colisão ou
não.