Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Colisiones 2d En Opengl

Iniciado por wialco, 13 de Marzo de 2006, 01:45:35 AM

« anterior - próximo »

wialco

 He estado probando a trabajar bajo opengl en 2D hasta que llegué al tema de las colisiones ¿Como puedo detectar si colisionan dos imágenes rotadas por bounding box? Sin tener agrandar el recuadro que las rodea según el nuevo ancho y algo. No se si me explico. Y ya de paso ¿Se puede hacer detección por píxel bajo opengl? Si hay algún tutorial por ahí que explique estos temas, bienvenido sea.

[EX3]

 La deteccion por pixel es muy costosa y lenta y en la inmensa mayoria de los casos totalmente innecesaria. Con la tecnica del "boundingbox" y colision por esferas ganas velocidad y suficiente precision para la mayoria de los casos. Para las rotaciones podrias usar el metodo de colision por esferas. Si te quieres complicar mas podrias usar varias cajas de colision para un mismo objeto e ir rotando su posicion respecto al grafico algo similar a esto:

Esto es una idea improvisada en el momento (y que al igual que Microsoft absurdamente patentare :P) Como puedes ver, la idea seria posicionar las cajas de colision, en este caso dos, respecto a un punto de giro por caja en una posicion fija del sprite. Las cajas realmente no se rotan, simplemente cambiarian su posicion tratando de cubrir el espacio del sprite. Este ejemplo a lo mejor no es muy preciso (hecho en 2 minutos a las 7 de la mañana no pidamos peras al olmo :P) pero bien afinado seria una forma rapida y mas o menos precisa de calcular colisiones en sprites rotados. Incluso si fuesen pocos frames la animacion, pongamos 4 por cada una, podrias hacerlas a medida y te ahorrarias los calculos incluso.

Aun asi que los expertos hablen y aconsejen algun metodo mas conocido, que realmente tambien estoy interesado :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Pogacha

 Opino igual que EX3, pero en realidad, creo que en vez de esferas, habrá querido decir elipsoides o circulos en su defecto. El sistema de elipsoides se pueden implementar con la misma técnica que se usa en 3D (segun el blog de supervaca), se complica un poco cuando hay que encontrar elipsoide vs elipsoide, pero es rapido y sirve eficientemente para 99% de los casos.
Saludos.

[EX3]

 
Cita de: "Pogacha"Opino igual que EX3, pero en realidad, creo que en vez de esferas, habrá querido decir elipsoides o circulos en su defecto.
Eso mismo, circulos. Por decir una cosa dije otra (nooo)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

nsL

 Igual te interesa este post de hace 2 años sobre colision por pixel desde hardware.

Lo tengo en favoritos desde hace un tiempo y aun no me dio por probarlo :P

Otra alternativa seria usar Mascaras de bits (1 bit por pixel). Donde 1 es pixel colisionable, y 0 es pixel no colisionable.
1º Miras a ver si hay colision de bounding box.
2º En caso de haber colision haces una AND de los bits resultantes del cuadrado que colisiona.
3º Si sale algun 1 de esa operacion de AND hay colision a nivel de pixel.

Mas o menos es esto:


Obviamente el metodo que dicen [EX3] y Pogacha es mas rapido, pero siempre puedes alternar ambos. Por ejemplo el personaje igual te interesa que tenga colision a nivel de pixel con otros elementos, mientrsa que algunos objetos del juego igual te interesan que tengan colision simplemente de bounding box.

El sistema q te pongo aqui he leido que lo usaban en consolas antiguas con buenos rendimientos, asi que debe ser rapido. Yo he llegado a probarlo pero solo con colision de raton, y a nivel de pixel va perfecto.

Saludos!
Yo no muero hasta la muerte -






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.