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

Tema: Blitz basic : colisiones

  1. #1
    Expulsado
    Fecha de ingreso
    Dec 2010
    Ubicación
    En matrix
    Mensajes
    1,681

    BLITZ basic : colisiones

    Mi problema es las colisiones de POLIGONo A ESFERA. Ya se 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 qué 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 qué funciona la colisión de esfera a polígono (que si soporta el blitz3d) pero a la inversa.

  2. #2
    Ninja Fever Avatar de Mars Attacks
    Fecha de ingreso
    Jun 2003
    Ubicación
    Castellón
    Mensajes
    12,744

    Re: 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
    Expulsado
    Fecha de ingreso
    Dec 2010
    Ubicación
    En matrix
    Mensajes
    1,681

    Re: 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 20:59

  4. #4
    Usuario Nuevo
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Re: BLITZ basic : colisiones

    Hola por aquí.
    Este es el concepto detrás de todas las colisiones (no se aceptan reclamos por mis dibujos en ASCI):
    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 qué 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 matematicamente.
    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 BlitzBasic. 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 23:55

  5. #5
    Expulsado
    Fecha de ingreso
    Dec 2010
    Ubicación
    En matrix
    Mensajes
    1,681

    Re: 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 qué tengo de solucionar esto es proyectar 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 poligono? 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; 20-07-2011 a las 00:05

  6. #6
    Usuario Nuevo
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Re: BLITZ basic : colisiones

    Hola aprendiz, lamento no haber respondido antes, tenía qué 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 qué 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 qué la esfera sea "aplastada" por dos polígonos que la colisionan al mismo tiempo? ¿O a un rebote? Aclarame un poco más esto para ver en que te puedo ayudar. Saludos.
    -Marco

  7. #7
    Expulsado
    Fecha de ingreso
    Dec 2010
    Ubicación
    En matrix
    Mensajes
    1,681

    Re: 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 qué suponte que la esfera choca contra un triángulo. Pues bien ese triángulo hace que la esfera se desplaze 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
    Usuario Nuevo
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Re: 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 15:44

  9. #9
    Expulsado
    Fecha de ingreso
    Dec 2010
    Ubicación
    En matrix
    Mensajes
    1,681

    Re: 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 (colision 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
    Usuario Nuevo
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Re: 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 ESTA FORMADA POR POLIGONoS 1 Y 2:
    | __.
    | Vx / \.
    | ------> | |.
    |POLIG. 1 ^ \____/.
    | | Vy.
    |____________|_________________.
    Pared POLIG. 2.
    T2: COLISION:
    |POLIG. 1.
    |_.
    / | \.
    | |___|________________________.
    \____/ POLIG. 2.
    T2: REPOSICIONAMIENTO PARA POLIGONo 1.
    |POLIG. 1.
    |.
    | __.
    |/ \.
    |______|_____________________.
    \____/ POLIG. 2.
    T2: REPOSICIONAMIENTO PARA POLIGONo 2.
    |POLIG. 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, restándo la distancia qué 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 02:40

  11. #11
    Expulsado
    Fecha de ingreso
    Dec 2010
    Ubicación
    En matrix
    Mensajes
    1,681

    Re: BLITZ basic : colisiones

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

  12. #12
    Usuario Senior Avatar de Jhonatan00_00
    Fecha de ingreso
    Oct 2016
    Mensajes
    172

    Re: 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
    Usuario Legendario Avatar de Soliman
    Fecha de ingreso
    Aug 2004
    Ubicación
    Torrevieja-Alicante
    Mensajes
    12,193
    http://soliman.jimdo.com/
    https://blender-28-soliman.jimdofree.com/
    VIDEOS
    VIMEO
    Beati Hispani quibus bibere vivere est
    BLENDERADICTO

  14. #14
    Usuario Senior Avatar de Jhonatan00_00
    Fecha de ingreso
    Oct 2016
    Mensajes
    172

    Re: BLITZ basic : colisiones

    Buenas noches Soliman, 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
    Usuario Nuevo
    Fecha de ingreso
    Jul 2011
    Mensajes
    18

    Thumbs up Re: 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, 06:20
  2. Colisiones con 3ds max
    Por javitooling en el foro Animación y Rigging
    Respuestas: 1
    : 07-03-2013, 18:58
  3. Exportador de blender a blitz basic 3d
    Por Sadyk en el foro Videojuegos
    Respuestas: 1
    : 15-03-2009, 01:10
  4. Colisiones en x3d
    Por FANTASMAA2004 en el foro Quien eres tu - Aqui puedes presentarte
    Respuestas: 1
    : 13-03-2009, 12:02
  5. Problema con collisions en blitz basic
    Por Alexs1888 en el foro Videojuegos
    Respuestas: 4
    : 23-08-2008, 21:40

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •