BigBang Temat założony przez niniejszego użytkownika |
[Irrlicht]Budowa labiryntu ze sześcianów, a kolizja » 2017-01-05 15:36:04 Witam. Ostatnio piszę sobie projekt w C++ w silniku Irrlicht (na tym projekcie się go uczę). Jest to prosta gra, której celem będzie pokonanie losowo wygenerowanego labiryntu w 3D. Labirynty ma postać tablicy 2D typu bool, która wygląda tak: bool labirynt[ 5 ][ 5 ] = { { 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 1, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 } };
Gdzie 1 oznacza ścianę, a 0 puste miejsce. Uznałem, że najprościej i najszybciej będzie w miejscu 1 rysować sześcian (addCubeSceneNode) o krawędzi 30. Na szybko zrobiłem to tak: for( int i = 0; i < 5; i++ ) for( int j = 0; j < 5; j++ ) if( maze[ i ][ j ] ) { ISceneNode * sciana = smgr->addCubeSceneNode( 30 ); sciana->setPosition( vector3df( j * 30, 0, i * 30 ) ); sciana->setMaterialTexture( 0, driver->getTexture( "media/wall.tga" ) ); sciana->setMaterialFlag( EMF_LIGHTING, false ); }
No cóż, działa to całkiem dobrze, nawet przy sporej ilości bez problemu utrzymuje 60FPS na mojej integrze. Ale to nie w tym leży problem. Do poruszania się potrzebna jest kolizja (nie mogę przecież umożliwić graczowi przechodzenie przez ściany). Postanowiłem wykorzystać tą wbudowaną w irrlichta, gdyż jest w pełni wystarczająca do tak prostego projektu. Niestety wystąpił pewien problem. Kolizja w Irrlicht polega na utworzeniu ITrianagleSelector, załadowaniu do niego trójkątów mapy, podpięciu go do ISceneNodeAnimator, utworzenie CollisionResponseAnimator i podpięciu go do kamery. Problem polega na tym, że nie jestem w stanie utworzyć ITriangleSelector z mapy, bo mapa to nie jest jeden obiekt, a wiele sześcianów + plane (jako podłoga) i każdy jest jako osobny ISceneNode. Tak więc nie jestem w stanie utworzyć ITriangleSelector, bo poprostu nie mam jednego ISceneNode, który by symbolizował całą mapę. Co więc mogę zrobić: 1. W jakiś sposób połączyć wszystkie elementy mapy w jeden ISceneNode 2. Jakoś inaczej rysować mapę Dodam, że utworzenie mapy z góry nie wchodzi w rachubę, bo ma być dynamicznie generowana. Ma ktoś jakikolwiek pomysł jak to załatwić? Z góry dziękuję za pomoc. |
|
pekfos |
» 2017-01-05 21:42:54 Tak więc nie jestem w stanie utworzyć ITriangleSelector, bo poprostu nie mam jednego ISceneNode, który by symbolizował całą mapę. |
Więc dodaj jeden ISceneNode, który by symbolizował całą mapę. W końcu to węzły drzewa, nie listy. |
|
BigBang Temat założony przez niniejszego użytkownika |
» 2017-01-06 16:12:17 A w jaki sposób mam połączyć wiele ISceneNode w jeden, który symbolizuje je wszystkie?
Edit: Ok, znalazłem sposób na to. Ktoś napisał MeshCombiner dla Irrlichta, który pozwala połączyć dowolną ilość Mesh w jeden ISceneNode. Dokładnie o to mi chodziło. Jak ktoś jest zainteresowany, to tutaj jest wszystko opisane: http://irrlicht.sourceforge.net/forum/viewtopic.php?t=39598
Zamykam, dziękuję za odpowiedzi. |
|
« 1 » |