Desarrollo de videojuegos enfoque practico vol 2

Page 261

12.5. Introducción a Bullet 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

[239]

// Bucle principal de la simulacion ---------------------------for (int i=0 ; i<300 ; i++) { dynamicsWorld->stepSimulation(1/60.f,10); btTransform trans; fallRigidBody->getMotionState()->getWorldTransform(trans); std::cout << "Altura: " << trans.getOrigin().getY() << std::endl; } // Finalizacion (limpieza) ---------------------------------dynamicsWorld->removeRigidBody(fallRigidBody); delete fallRigidBody->getMotionState(); delete fallRigidBody; dynamicsWorld->removeRigidBody(gRigidBody); delete gRigidBody->getMotionState(); delete gRigidBody; delete fallShape; delete groundShape; delete dynamicsWorld; delete solver; delete collisionConfiguration; delete dispatcher; delete broadphase; return 0; }

El ejemplo anterior podría compilarse con un sencillo makefile como se muestra a continuación: Listado 12.2: Makefile para hello world. 1 2 3 4 5 6 7

CXXFLAGS := ‘pkg-config --cflags bullet‘ LDLIBS := ‘pkg-config --libs-only-l bullet‘ all: HelloWorldBullet clean: rm HelloWorldBullet *~

Una vez compilado el programa de ejemplo, al ejecutarlo obtenemos un resultado puramente textual, como Altura: 49.9972 el mostrado en la Figura 12.20. Como hemos comentaAltura: 49.9917 do anteriormente, Bullet está diseñado para permitir un Altura: 49.9833 uso modular. En este primer ejemplo no se ha hecho uso Altura: 49.9722 de ninguna biblioteca para la representación gráfica de la Altura: 49.9583 escena. Altura: 49.9417 Altura: 49.9222 Si representamos los 300 valores de la altura de la Altura: 49.9 esfera, obtenemos una gráfica como muestra la FiguAltura: 49.875 Altura: 49.8472 ra 12.21. Como vemos, cuando la esfera (de 1 metro de Altura: 49.8167 radio) llega a un metro del suelo (medido desde el cenAltura: 49.7833 tro), rebota levemente y a partir del frame 230 aproximaAltura: 49.7472 damente se estabiliza. Altura: 49.7083 ✄ Altura: 49.6667 El primer include definido en la línea ✂2 ✁del programa ... anterior se encarga de incluir todos los archivos de cabeFigura 12.20: Salida por pantalla de cera necesarios para crear una aplicación que haga uso del ejecución del Hola Mundo en Bumódulo de dinámicas (cuerpo rígido, restricciones, etc...). la llet. Necesitaremos instanciar un mundo sobre el que realizar la simulación. En nuestro caso crearemos un mundo discreto, que es el adecuado salvo que tengamos objetos de movimiento muy rápido sobre el que tengamos que hacer una detección de su movimiento (en cuyo caso podríamos utilizar la clase aún experimental btContinuousDynamicsWorld).


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.