Página 1 de 3 123 ÚltimoÚltimo
Resultados 1 al 15 de 33

Tema: Blitz basic colisiones

  1. #1
    Fecha de ingreso
    Dec 2010
    Mensajes
    1,668

    Blitz basic : colisiones

    Mi problema es las colisiones de polígono a esfera. Ya sé que blizt3d no soporta este tipo de colisiones, pero necesito implementar un código que las realice. Lo que necesito es teniendo una malla realizar una rutina que compruebe polígonos y sus colisiones con una esfera y le de la física necesaria para desplazarse al colisionar, es decir, de la misma forma que funciona la colisión de esfera a polígono (que si soporta el Blitz3d) pero a la inversa.

  2. #2
    Fecha de ingreso
    Jun 2003
    Mensajes
    12,618

    Blitz basic : colisiones

    No tengo ni idea de Blitz, pero igual es algo que puedes preguntar por los foros de http://www.stratos-ad.com (allí hay varios blitzeros, creo).

  3. #3
    Fecha de ingreso
    Dec 2010
    Mensajes
    1,668

    Blitz basic : colisiones

    Bueno, me acordé de que este tema ya lo había abierto hace tiempo, y a ver si marco puede echarme un cable. Dejo el código actual en el que estaba trabajando.

    Posdata: me propongo desde hoy intentar poner acentos.
    Archivos adjuntados Archivos adjuntados
    Última edición por aprendiz; 19-07-2011 a las 19:59

  4. #4
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Blitz basic : colisiones

    Hola por aquí. Este es el concepto detrás de todas las colisiones (no se aceptan reclamos por mis dibujos en ascii):
    Código:
    los modelos 3d en Blitz están formados por Mayas (Mesh), que a su vez están.
    
    Formadas por triángulos. Cada triángulo se define por sus vértices, que son.
    
    Coordenadas en x-y-z:
    V1 = (x1, y1, z1).
    /\.
    /.
    /.
    /.
    /_ _ _ _.
    
    V2 v3.
    
    Cuando mueves un triángulo seguirá un movimiento lineal:
    /\.
    / \ distancia = velocidad * tiempo.
    / \ ->.
    /.
    /_ _ _ _.
    
    Este movimiento describe un volumen (inclino un poco el triángulo para verlo mejor):
    Tiempo inicial tiempo final.
    | |.
    ________________________.
    /\ /\.
    / \ /.
    / \ __________________/____\.
    / __-- / __.
    /__--____________________/__.
    
    Si el triángulo colisiona con una esfera, eso significa que la esfera quedará.
    
    Dentro del volumen que describe el triángulo al moverse (la zona punteada esta.
    
    Metida en la esfera):
    _ _ _ _ _ _.
    /.
    _____________/__________.
    /\ /./\.
    / \ |./.\ |.
    / \ ________|_________/____\ |.
    / __-- |./.__-- |.
    /__--____________|_______/__-- |.
    \ /.
    \ /.
    \ _ _ _ _ _ _ _ /.
    
    Ahora lo que necesitas es simplificar el problema para resolverlo matemáticamente.
    
    Si te lo imaginas, ese volumen del triángulo en movimiento es como un prisma.
    
    Si el prisma entra en la esfera, esta necesariamente deberá tocar alguna de.
    
    Las 3 caras o planos laterales (a, b, o c):
    ________________________.
    /\ plano a (adelante) /\.
    / \ plano b (atrás)/.
    / \ __________________/____\.
    / __-- Plano c (abajo)/ __.
    /__--____________________/__.
    
    Entonces necesitas resolver la intersección de los 3 planos y la superficie de la.
    
    Esfera, que se hace con el siguiente pseudo-código:
    Producto_punto_del_plano = productopunto (normal_del_plano, un_punto_en_el_plano).
    
    Distancia = productopunto (centro_de_la_esfera, normal_del_plano) - Producto_punto_del_plano.
    
    Hay_colision = valorabsoluto (distancia) <= radio_de_la_esfera.
    
    Repites esta prueba para los 3 planos, y vuelves a repetir todo para cada triángulo.
    
    De la Maya. Si alguna prueba es positiva entonces habrá colisión.
    
    Y este es el fundamento de todas las demás colisiones.
    Espero que te ayude. Te dejo de tarea traducirlo a Blitz BASIC. Si tienes alguna duda avísame, pero en general si no entiendes algún concepto matemático tendrías que estudiarlo.

    Posdata: por cierto, que me faltó un caso, pero si entiendes el concepto seguro lo descubrirás. Saludos.

    Marco.
    Última edición por marcoantap; 19-07-2011 a las 22:55

  5. #5
    Fecha de ingreso
    Dec 2010
    Mensajes
    1,668

    Blitz basic : colisiones

    Valla esto lo sabía, pero no lo había planteado nunca como un volumen. Lo que yo hacia era cuando un ente se movía, desmoverlo y comprobar si chocaba. Pero ahora con esos dibujos lo veo más claro.

    Si no me equivocó lo que consigues es obtener la distancia más cercana del centro de la esfera a los tres planos que conforman el volumen. Pero, si la esfera está muy alejada y su centro esta a la distancia menor al radio, aún sin haber colisión con los planos que forman el volumen no habrá colisión y la función dirá que sí. Yo la forma que tengo de solucionar esto es trabajo el centro de la esfera sobre el plano, y comprobar sus distancias a los vértices, alguna manera/algoritmo mejoré.

    También faltaría la comprobación de la intersección con lo que sería el triángulo en su posición actual y en la posición previa.

    Mi problema es el movimiento, es decir, cuando detectas que ha chocado contra un polígono perfecto, se mueve en la dirección perpendicular a la normal del polígono, pero proyectada en el plano del moviento.

    Pero cuando ese movimiento resultante de una colisión hace que colisione con un nuevo polígono? Como resuelves tu eso?
    Yo lo hice mediante llamadas recursivas a la función, pero me parece que esa no es la forma correcta, por las fps, y porque si la malla tiene muchos triángulos juntos, la función debería llamarse tantas veces como choques implique el movimiento.

    Y bueno, sin usar esta solución, simplemente atraviesa uno de los polígonos. ¿Qué propones? Gracias por la respuesta del volumen, ahora lo veo más claro.
    Última edición por aprendiz; 19-07-2011 a las 23:05

  6. #6
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Blitz basic : colisiones

    Hola aprendiz, lamento no haber respondido antes, tenía que resolver un trabajo urgente. Claro la cuestión es imaginar un volumen. Por ejemplo, cuando una esfera se mueve forma una capsula, en el caso del triángulo forma un prisma.

    No entiendo muy bien tu ejemplo de la esfera muy alejada, ¿te refieres a que la esfera contiene al prisma? En ese caso solo tienes que probar si todos los vértices están dentro del radio de la esfera. Es cuestión de hacer un caso adicional.

    Otra cosa que no entiendo es el problema con el nuevo polígono. ¿te refieres a que la esfera sea aplastada por dos polígonos que la colisionan al mismo tiempo? ¿o a un rebote? Aclárame un poco más esto para ver en qué te puedo ayudar. Saludos.

    Marco.

  7. #7
    Fecha de ingreso
    Dec 2010
    Mensajes
    1,668

    Blitz basic : colisiones

    A, ese caso no lo había visto yo, (me refiero a que el prisma este dentro de la esfera). Lo que me refiero a muy alejada es que, siendo la distancia de la esfera al plano menor al radio, pero, aun así, estando la esfera fuera del prisma.

    Lo del nuevo polígono me refiero a que suponte que la esfera choca contra un triángulo. Pues bien ese triángulo hace que la esfera se desplace por él. En ese desplazamiento suponte que choca contra un nuevo triángulo (me exprese mal con polígono, quería decir triángulo), como tratas en ese caso la colisión? Gracias de antemano.

  8. #8
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Blitz basic : colisiones

    Lo que me explicas lo veo así:
    Código:
    |plano /.
    | /.
    | <--- De -> | <-------------------------------------------- Radio -*centro.
    |.
    | \
    Estoy seguro que el algoritmo en pseudo-código que te mostré cubre ese caso.

    Ahora si entiendo la segunda parte. Pues una cosa es la detección de la colisión, y otra cosa será la simulación del efecto, como en las leyes de causa y efecto. Pues todo depende de lo que quieras simular. Por ejemplo, si la esfera es una bomba de jabón, y el triángulo es una estrella ninja, que pasara con la esfera? O si la esfera es de goma? O si es de vapor? O de acero? O si el material de los 2 objetos es magnético? O si la esfera representa la pólvora en una bala? Y que tal que sea un agujero negro supermasivo? Como ves todo depende de la reacción del material, y usarías algoritmos diferentes para cada caso. Saludos.
    Última edición por marcoantap; 21-07-2011 a las 14:44

  9. #9
    Fecha de ingreso
    Dec 2010
    Mensajes
    1,668

    Blitz basic : colisiones

    Bueno realmente a lo que me refería es a esto.
    Código:
    /.
    /.
    / este es el plano.
    /.
    /.
    /.
    --.
    
    R - Esta es la esfera.
    -+-----
    --.
    Bueno no se me da bien hacer esos dibujos. Lo que digo es que estando el centro de la esfera a una distancia menor al radio, esta se encuentra fuera del plano.

    Lo de los algoritmos diferentes ya te entiendo. Pero yo me refiero a una colisión básica de desplazamiento.

    Es decir, tengo un personaje cualquiera (colisión de esfera) y una pared, bueno pues si se acerca a ella y la colisiona se desplazara por ella (como en todos los juegos que hay). Pero si la pared es una esquina, y el movimiento de una de las caras hace que choque contra otra cara en el mismo bucle del programa, hay como haces? Esa es la pregunta.

  10. #10
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Blitz basic : colisiones

    Con el dibujo está más claro. Pero igual sigo pensando que el algoritmo cubre ese caso también. Ahora, puesto que los planos son infinitos, se podría restringir el área de contacto con el plano.

    Para la segunda parte, otro dibujo.
    Código:
    t1: inicio, donde pared está formada por polígonos 1 y 2:
    | __.
    | vx /.
    | -> | |.
    |polígonos. 1 \____/.
    | | vy.
    |____________|_________________.
    
    Pared polígonos. 2.
    
    T2: colisión:
    |polígonos. 1.
    |_.
    / |.
    | |___|________________________.
    \____/ polígonos. 2.
    
    T2: reposicionamiento para polígono 1.
    |polígonos. 1.
    |.
    | __.
    |/.
    |______|_____________________.
    \____/ polígonos. 2.
    
    T2: reposicionamiento para polígono 2.
    |polígonos. 1.
    | __.
    |/.
    | |.
    |\____/______________________.
    
    Polig. 2.
    Como me decías que necesitas la colisión polígono contra esfera, en este ejemplo una pared con esquina se mueve hacia una esfera. Al detectarse la colisón, se reposiciona la pared, restando la distancia que esta se incrusta en la esfera. Si no hay fricción se toman en cuenta sólo las componentes de la velocidad. La detección de la colisión y el reposicionamiento se hacen en el mismo bucle.
    Última edición por marcoantap; 23-07-2011 a las 01:40

  11. #11
    Fecha de ingreso
    Dec 2010
    Mensajes
    1,668

    Blitz basic : colisiones

    A, ok, gracias, ahora ya tengo una idea. Intentare hacerla en Blitz.

  12. #12
    Fecha de ingreso
    Oct 2016
    Mensajes
    227

    Blitz basic : colisiones

    Madre mía qué follón para hacer que Blitz3D detecte una puñetera colisión como debe de ser.

    Estoy buscando hilos antiguos sobre colisiones por el foro y por Internet y no encuentro nada útil, todo parrafadas del copón para hacer de forma super complicada y chapucera algo que en cualquier engine del mundo debe de venir implementado.

    Yo soy de los puristas que piensan y defienden que todo lo debes de hacer desde cero, todo, programación, modelado, sonido, animación y texturizado, todo, pero es que, con Blitz3D es imposible hacer un videojuego.

    Tengo el problema de que el protagonista solo puede ser una esfera como colisión y además de que esa esfera no se puede estirar ni recolocar en ninguna posición, sino que se pone en los pies del protagonista y cuanto más radio le das, más gordo es el personaje y eso implica qué antes de que toque una pared ya haya colisionado o que como la esfera queda en los pies, choques contra un objeto con la cabeza al saltar y no lo coja.

    Le he dado veinte mil vueltas y es un asunto que erróneamente he ido dejando porque no sabía solucionar y he ido avanzando en el juego dejando ese punto y cuando ya tengo bastantes cosas (que me han costado también un huevo) hechas, me doy cuenta que no se puede hacer un videojuego con Blitz3D, no se puede.

    No se puede porque no es cuestión de trabajo, de ingeniartelas, es que tiene tantas limitaciones que dudo mucho que ningún videojuego por más retro que sea se haya podido programar con un engine así, es absurdo, es que el Mario 64 que es un videojuego de 1996 tiene unas físicas y unas colisiones que no hace Blitz3D ni de coña.
    ¿Alguien sabe cómo puedo hacer que el protagonista sea un cubo hablando de colisiones y que detecte las colisiones con otros cubos, esferas o polígonos? Al final acabaré dejando de lado el engine, porque tampoco he visto en Internet ni un solo juego profesional hecho con Blitz3D y será por algo. Saludos y feliz navidad.

  13. #13
    Fecha de ingreso
    Aug 2004
    Mensajes
    22,247

  14. #14
    Fecha de ingreso
    Oct 2016
    Mensajes
    227

    Blitz basic : colisiones

    Buenas noches Solimán, como siempre tu, ayudando al personal en todo lo posible, no sé qué sería del foro sin personas como tú, de verdad te lo digo.

    He estado mirando un poco por encima los videos de los enlaces que has colgado y algunos de ellos los había visto ya, otros no, pero la verdad es que, siguen sin aportar nada nuevo al tema, o al menos yo no he visto nada de utilidad.

    Como no encuentre una solución para lo que queda de año me paso a Unity. La pena es el trabajo que voy a tener que tirar a la basura en programación, que no sabes lo que me costó por ejemplo, programar el comportamiento de la cámara, que me llevó meses hacerla.

  15. #15
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Thumbs up Blitz basic : colisiones

    Como pasa el tiempo, aún recuerdo mis años con Blitz. Igual que tú perdí mucho tiempo creando mis propios códigos, pero la tecnología avanza no podemos evitarlo. Entender estas cosas en bajo nivel es lo que nos hace buenos programadores. Ahora si lo que quieres es terminar tus proyectos aprende a utilizar las herramientas modernas. Aprovecha lo que te dan. Compensa el tiempo que te ahorran mejorando la jugabilidad y el aspecto de tus juegos. Invierte más tiempo en entender el mercado de apps y serás recompensado.

Página 1 de 3 123 ÚltimoÚltimo

Temas similares

  1. Tutores para crear videojuejos con Blitz basic 3d
    Por Cibertronic en el foro Videojuegos
    Respuestas: 0
    : 25-09-2014, 05:20
  2. Blitz basic 3d
    Por Cibertronic en el foro Videojuegos
    Respuestas: 668
    : 04-10-2013, 23:13
  3. Exportador de Blender a Blitz basic 3d
    Por Sadyk en el foro Videojuegos
    Respuestas: 1
    : 14-03-2009, 23:10
  4. Problema con collisions en Blitz basic
    Por Alexs1888 en el foro Videojuegos
    Respuestas: 4
    : 23-08-2008, 20:40
  5. Plugin de 3ds Max 8 a Blitz 3d
    Por gersin en el foro Plugins
    Respuestas: 3
    : 25-01-2008, 13:21