Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre colisiones...

Iniciado por reinier_ch, 26 de Noviembre de 2006, 03:24:28 AM

« anterior - próximo »

reinier_ch

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.  :?:

BeRSeRKeR

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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

reinier_ch

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.

BeRSeRKeR

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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

alexglez1

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
studiante de 5to año de Igenieria informatica
 Alberto Gonzalez






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.