Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Pixel Perfect Colisions Con Stencil Buffers

Iniciado por deadLock++, 02 de Diciembre de 2003, 08:20:26 PM

« anterior - próximo »

Loover

 Pero con lo de las máscaras de dureza volvemos a lo de que los sprites no podrían rotarse/escalarse... pq sino habría que ir creando la máscara a cada frame :( Ahí esta el problema.

En cuanto a los sprites grandes tienes razón. Aunque piensa que con tu método deberían dibujarse 3 veces y con el mio solo dos + la comparación. La pregunta es... ¿que es más rapido?  ¿lockear y comparar? o ¿dibujar 1 vez más?

Tendré que hacer pruebas.

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Haddd

 Bueno asumimos que tu rutina de rotación no es exactamente igual que la que utiliza el hardware y algunos pixels no se dibujan en la misma posición. Por tanto, sólo nos queda o lo del lock o de las querys

Es obvio que en una tarjeta aceleradora es más rápido pintar que bloquear y leer. Porque al leer los datos pasan de la tarjeta a la CPU a través del bus AGP y además impide que la aceleradora pueda seguir haciendo cosas. Desde mi punto de vista, poco óptimo.

Lo de las dos pasadas para la aceleradora no tiene que ser muy costoso, porque piensa que es una aceleradora y está optimizada para ello. De todas formas, podrías utilizar varias técnicas que te permitirían ahorrar:

Lo que "fastidia" a las aceleradoras más es el acceso a memoria. Las texturas están en memoria y cada vez que tiene que pintar un pixel tiene que ir a buscarla en la memoria. Para la primera pasada tu solo necesitas que te devuelva el nº de pixels, así que:

-Desactiva los filtros, con esto ganarás mucho

-Como necesitas el Alpha para controlar las transparencias, crea una textura aparte donde sólo esté el alpha y utiliza un formato comprimido. Ahora no se me ocurre que formato puedes usar, pero piensa que te basta con 1 bit!. De esta forma, los accesos a memoria se reducen drásticamente. Esta opción supongo que no te gustará, porque gastas memoria de vídeo dos veces, pero realmente ganarás bastante.

-Si el Query te devuelve la información por Z en lugar de por color, desactiva la escritura en el buffer de color.

Además de esta forma sabrás el grado de "colision", es decir, el nº de pixels que colisionan y esto te podría servir para tu juego. También sabrías el nº de pixels que ocupa el sprite que vas a dibujar, y eso también te podría servir para dibujar ordenadamente por el que mayor nº de pixels ocupa.





Loover

 Ale, pues me has convencido :)
Si tengo alguna duda durante el proceso la pondré por aquí, muchas gracias.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Haddd

 Mira el post que he hecho en programación 3D!






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.