Mi inquietud radica en que deseo implementar un video juego de billar clásico ( 3 bolas ), usando OpenGL y C++, pero no sé como implementar la física y qué debo tener en cuenta para que sea lo más realista posible, es decir, poder implementar todo tipo de estilos de juego (artístico, 3 bandas, libre, al cuadro etc..) y que el comportamiento de las bolas responda a los efectos que se les apliquen. Debe ser en 3D.
Lo que debes hacer primero que todo es idear un sistema de detección de colisión para lo que te aconsejo utilizar bounding spheres para el taco y para cada bola, debes tener en cuenta la distancia respecto al centro de la bola para conocer su rotación, debes tener en cuenta parámetros de fricción estática y dinámica y hacer una animación por cuadros, con una estructura que te permita conocer para cada instante la velocidad, la posición, y la rotación para cada partícula; dees tomas todas las partículas como objetos rígidos, para que se te faciliten más las cosas, para acelerar la detección puedes utilizar una estructura de OctTree, que acelera la búsqueda, claro que si utilizas BoundingSpheres no sera necesario, solo hay un problema, debes resolver una ecuación diferencial si quieres tratar el sistema como masa-resorte, para que puedas saber el comportamiento de la velocidad a lo largo del tiempo, si no, puedes idear cada movimiento como velocidad constante con una mínima fricción de la mesa, trat de ir lentamente, sin muchos detalles, primero la parte física, luego el render, eso es menos complicado.
Hola nicoooo, Ante todo, muchísimas gracias por su respuesta, ya que esta orientación es muy valiosa y aporta mucho para este proyecto. Debo aclarar que soy novato en muchos temas y que este proyecto es todo un reto. Para empezar no conozco acerca de boundingSpheres ni estrucuras de octTree, y si esto es de vital importancia, quisiera que me ilustrara acerca de estos temas. Muchas gracias, Nelson.
Ok, te cuento:, cuando vas a trabajar con detección de colisión con modelamiento físico, como en este caso, cuando buscas los posibles vértices, caras o bordes que van a chocar, debes preguntar a cada vértice si choca con cualquier otro en la escena, por lo tanto esta búsqueda de orden n2, donde n es el numero de vértices + caras + bordes en la escena, esto gasta muchísimo tiempo, por lo tanto se usan cajas de frontera que son cubos que delimitan las partículas, en este caso un cubo para la mesa, un cubo para cada bola, y otro para el taco, por lo tanto, cuando sabes que las partículas se acercan, buscas primero si un cubo tiende a chocar con otro, ahora tu búsqueda es de orden 5x5 = 25, muchísimo menor que antes, ahora bien, cuando sabes que dos o más cajas van a chocar, buscas los vértices, caras y bordes que chocan solo en esas dos partículas, esto reduce mucho la complejidad, pero en todo caso si las partículas son complejas, también gastaría mucho tiempo; (lo de las boundingspheres es simplemente en vez de un cubo, una esfera recubre cada partícula, de esta forma tienes más precisión, y gastas menos tiempo en buscar los vértices que chocan, y si puedes manejar coordenadas esféricas, sera hasta más rapido que los bounding boxes). Y ahora los octrees, que son lo siguiente: en un árbol binario tienes dos nodos, izquierdo y derecho, y ya; en un octtree tienes ocho nodos como resultado de la partición del bounding box del objeto por mitad sobre cada eje, entonces cuando vas a buscar algo en on octtree preguntas algo como: ¿Esta a la derecha?, si es verdad, ya puedes eliminas todo a la izquierda, y ahora, entre los vértices de la derecha, ¿esta arriba?, si es verdad, descartas los de abajo, y si esta adelante descartas los de atrás, ahora ya sabes que hay que buscar en el nodo ubicado a la derecha, arriba y adelante, este es el indice de un hijo de la raíz del árbol, ahora al entrar preguntas lo mismo al nodo, hasta encontrar lo que quieres; bien, esto si es rapido, y es lo que seria bueno que hicieras. Bueno, como siempre espero que te haya servido mi ayuda, puedes buscar información, muchisimia muchísima en www.gamedev.net y www.gamasutra.com ahí puedes encontrar demos, recursos, documentos, libros, de todo.
Muchísimas gracias nicoooo, investigare acerca de estos temas y este proyecto saldrá adelante gracias a tu ayuda. Buena suerte! Nelson1975.