Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: reinier_ch en 26 de Noviembre de 2006, 03:24:28 AM

Título: Sobre colisiones...
Publicado por: reinier_ch en 26 de Noviembre de 2006, 03:24:28 AM
Hola a todos:

Soy nuevo por aqui y nuevo en el mundo de la programacion grafica, pero tengo que ir aprendiendo en la marcha, ya que no dispongo de mucho tiempo y estoy con la soga al cuello...
De momento agradeceria si alguien pudiera facilitarme algun algoritmo o alguna idea de como determinar el lugar en un modelo del cuerpo humano (brazos, piernas, etc..), donde hice clic con el puntero del mouse, o sea dada las coordenadas del raton , podria ser?? decir a que parte del cuerpo pertenece...

Agradezco a cualquier ducho en esta materia que me pueda ayudar...

Saludos Yo.  :?:
Título: Sobre colisiones...
Publicado por: BeRSeRKeR en 26 de Noviembre de 2006, 11:20:43 AM
Supongo que lo más sencillo sería tener el cuerpo dividido en las distintas partes (brazos, piernas, cabeza, etc.) y entonces, al hacer click con el ratón en la ventana, crear un rayo (pasando las coordenadas del ratón a world-space) y ver con qué parte del cuerpo colisiona dicho rayo (si es que colisiona).

Si utilizas Direct3D es muy sencillo. Tu modelo lo cargas como un D3DXMesh compuesto por varios subsets (las distintas partes del cuerpo). Entonces, cuando hagas click, pasas las coordenadas del ratón de screen-space a world-space utilizando la función D3DXVec3Unproject. Esas coordenadas serán el origen del rayo y la dirección será la dirección del vector de vista (hacia donde mira la cámara). Entonces no tienes más que llamar a la función D3DXIntersectSubset para saber si el rayo ha colisionado con un subset en concreto.

Otra forma sería tener el modelo de una sola pieza (o no, eso depende de tí) y entonces generar un bounding box por cada bone del modelo y posteriormente detectar la colisión con dicho bounding box.

Saludos.
Título: Sobre colisiones...
Publicado por: reinier_ch en 26 de Noviembre de 2006, 09:08:27 PM
Gracias amigo:
 
 Eso esta bueno voy a tratar de hacer algunas pruebas, aunque en realidad necesito mas trabajar con los "bounding box", o sea tratar de esquivar  el Direct3D   por un problema de compatiblidad donde va a ser utilizado este algoritmo...o sea se quiere que sea multiplataforma etc, de todas formas lo voy a consoltar.

No obstante si me pueden brindar alguna informacion hacerca de como generar un "bounding box" para cada hueso de forma dinamica, o si esta no es la mejor via vale la aclaracion, lo que necesito es resolver ese problemita...
             
Millon de gracias por cualquiere informacion.
Título: Sobre colisiones...
Publicado por: BeRSeRKeR en 27 de Noviembre de 2006, 05:52:31 AM
Aunque no utilices Direct3D, puedes tirar por el camino de los submeshes. Simplemente, para cada uno de ellos calculas un bounding box (o cualquier primitiva que quieras) y luego, al hacer click con el ratón, miras si el rayo colisiona con dicho bounding box. Si lo hace, pasas a refinar la intersección comprobando si el rayo colisiona con alguno de los triángulos que conforman el submesh.

En cualquier caso, para calcular el bounding box de un bone, debes recorrer todos los vértices influenciados por dicho bone e ir generando el bounding box. El bounding box también tiene que cubrir los puntos terminales del bone (la posición del bone actual + la posición del bone hijo).

En fin, la primera solución parece la más sencilla.

Saludos.
Título: Sobre colisiones...
Publicado por: alexglez1 en 07 de Diciembre de 2006, 02:03:57 AM
hola
Yo estoy comensando a trabajar este tema de las colisiones pero he leido un poco ya y te pudiera sujerir que utilizaras otro tipo de boundaring pues para figuras humanas el las cajas no son la mas optima debido a que no se ajustaria bien al cuerpo y le quitaria realismo a la aplicacion
    saludos