Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Colisiones De Sprites Al Pixel Por Hardware

Iniciado por Haddd, 01 de Febrero de 2004, 07:52:55 PM

« anterior - próximo »

Haddd

 Bien, pues hace no mucho hubo un post sobre colisiones por hardware, y yo propues una técnica, que era utilizando Querys de oclusión.

Aprovechando que estoy preparando el motor para publicarlo, decidí probar esta técnica. La gran ventaja que tiene es que las colisiones son por hardware, por lo que las rotaciones y escaladosse contemplan sin problemas.

Vereis un sprite de un color más claro, y un motón pegando botes. Cuando el claro toca a otro, este se pone oscuro. Podeis activar / desactivar con la c el sistema de colisiones, y así vereis el coste en velocidad.

Ese enlace

Espero que os guste. A mi me parece muy chulo y una buena técnica.  (ole)  

Loover

 Olé! Jajaja.
Yo aún no he tenido tiempo de implementarlo. Cuando acabe con los scrolls me pondré y ahora que ya lo tienes hecho y todo... ¿podías pasarme el código fuente? De esa parte solo claro.
Voy a probarlo, ciao!

EDITADO: Ains :( Como no tengo PS me va tan lento que no puedo apreciarlo, lástima.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Haddd

 Escribiré un artículo sobre el tema, explicando cómo funciona. :D  

[EX3]

 No es por fastidiar pero cuando lo ejecuto me salta un mensaje de error grave de Windows y se me cierra :(
Te pongo una parte del log ke me ha llamado la atencion por estar resaltado en rojo:

Citar(...)
---------SHADERS---------
   Nº de constantes en el vertex shader:96
   NO SOPORTA PIXEL SHADER 2.0
   NO SOPORTA PIXEL SHADER 1.4

   SI SOPORTA PIXEL SHADER 1.1. 8 constantes, 4 coordenadas de textura, 2 temporales
   NO Soporta Querys de Oclusión
(...)
No creo ke venga por lo de los Querys de Oclusion no soportados, por ke eso se supone ke lo controla tu motor y no iniciaria el programa, no?

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

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

Haddd

 Si no soporta Querys NO funcionará. Pero como bien dices, el motor debería controlarlo.
¿Qué tarjeta tienes?

ShAq

 buenas, a mi si que me va bien, solo
que  si cambio de tamaño la ventana
me da un error grave de windows...
y al final del log me sale:

INICIO CXVideo::Resize3DEnvironment
  Device->Reset() D3DERR_INVALIDCALL

Saludos

Haddd

 Cierto, el motor no controla los lost device y sale del sistema. Tengo que arreglar esto....

[EX3]

 Haddd dijo:
CitarSi no soporta Querys NO funcionará. Pero como bien dices, el motor debería controlarlo.
¿Qué tarjeta tienes?
3D Blaster GeForce3 Titanium 200 64mb

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

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

Haddd

 ¡Que fuerte, la GForce 3 no soporta Querys de oclusión y sólo Pixel Shader 1.1!  :huh:

Pues lo siento, espero que las Querys de oclusión sean un standard, igual que los pixel shaders 2.0

[EX3]

 Haddd dijo:
Citar¡Que fuerte, la GForce 3 no soporta Querys de oclusión y sólo Pixel Shader 1.1! 

Pues lo siento, espero que las Querys de oclusión sean un standard, igual que los pixel shaders 2.0
Ya weno, y segun tu motor mi tarjeta no soporta el modo a pantalla completa  (uoh)  :lol:

Salu2...

P.D.: Espero no equivocarme, pero he leido ke no soporto FullScreen, te posteo el inicio del log para ke lo veas tu mismo:

CitarHaddd v1.0 (Feb 1 2004 19:44:36)
INICIO CXVideo::CXVideo
FIN CXVideo::CXVideo
Nº de adaptadores:1
No soporta FullScreen
No soporta FullScreen
TARJETAS Y SUS DEVICES
Tarjeta:0 3D Blaster GeForce3 Ti 200
Device:0 HAL Behavior: HW MIX SOFT NºFormatos:2
Modo:0 Modo Ventana posible 00000016 X8R8G8B8 DEPTH STENCIL 00000050 D16 0000004d D24X8 0000004b D24S8 00000047 D32
Modo:1 Modo Ventana NO posible 00000017 R5G6B5 DEPTH STENCIL 00000050 D16 0000004d D24X8 0000004b D24S8 00000047 D32
Device:1 REF Behavior: NO SOPORTA T&L NºFormatos:2
ESTE DEVICE NO CUMPLE LAS EXIGENCIAS MINIMAS DEL MOTOR
Modo:0 Modo Ventana NO posible 00000016 X8R8G8B8No soporta FullScreen
Modo:1 Modo Ventana NO posible 00000017 R5G6B5No soporta FullScreen
INICIO CXVideo_Inicializacion::CrearVentana
FIN CXVideo_Inicializacion::CrearVentana
INICIO SeleccionarDepthStencil
Depth Bits=16 Stencil Bits=0 D16
FIN SeleccionarDepthStencil
CXVideo_Inicializacion::InicializarDevice
   Behavior seleccionado:D3DCREATE_HARDWARE_VERTEXPROCESSING
CXVideo_Inicializacion::InicializarDevice
INICIO Características del Device
   Versión de SDX:31. De D3D:0900
   Versión del Adaptador:2185
   Memoria de vídeo disponible:108 MB (110592 KB)
   HAL (hw vp): 3D Blaster GeForce3 Ti 200 (740x560x8) (D16S0)
   Escritorio: Ancho=1024 Alto=768
   FullScreenGamma OK
   CanCalibrateGamma NO DISPONIBLE
   Alpha en modo Flip/Discard OK
   Nº Máximo de Streams para Vertex Buffers=16. Tamaño máximo en bytes(Stride)=256
   Nº Máximo de indexbuffer=x000fffff.
   Nº de RenderTarget simultáneos:1
   ---------TEXTURAS---------
   Utilizando formato por defecto para las texturas A8R8G8B8
   Las texturas NO necesitan ser potencias de 2
   Máx Anchura x Altura: 4096 x 4096
   Nº máximo de texturas simultáneas:4
   Soporta compresión DXT1
   Soporta compresión DXT2
   Soporta compresión DXT3
   Soporta compresión DXT4
   Soporta compresión DXT5
   Soporta Texturas volumétricas
   ---------SHADERS---------
   Nº de constantes en el vertex shader:96
   NO SOPORTA PIXEL SHADER 2.0
   NO SOPORTA PIXEL SHADER 1.4

   SI SOPORTA PIXEL SHADER 1.1. 8 constantes, 4 coordenadas de textura, 2 temporales
   NO Soporta Querys de Oclusión
FIN Características del Device
(...)
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

jpastor

 El ejemplo usa una resolución de 740x560, supongo que es normal que la tarjeta no soporte fullscreen.

Haddd

 Lo que me extraña es que el modo REF no soporte los requerimientos mínimos. ¿Tienes instaladas las DX 9.0b de desarrollo?


[EX3]

 jpastor dijo:
CitarEl ejemplo usa una resolución de 740x560, supongo que es normal que la tarjeta no soporte fullscreen.
Cierto, ahi puede estar la razon, no habia caido  :P

Haddd dijo:
CitarLo que me extraña es que el modo REF no soporte los requerimientos mínimos. ¿Tienes instaladas las DX 9.0b de desarrollo?
Tengo instaladas las Runtime (no SDK) version 9.1.

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

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

Loover

 Sip, en ese ejemplo el frame buffer es 740x560, ¿no es así? Pero eso es casi seguro por los márgenes de la ventana (la lína azul, los bordes grises, etc). Me dí cuenta de ese detalle hace poco: que el frame buffer no tenía porqué ser del tamaño que he creado la ventana, lógicamente este es menor. Sinembargo si la hubiera creado en pantalla completa, al no tener bordes la ventana pues el frame buffer ya sería de 800x600 y te debería ir perfectamente.

Es mejor tener encuenta esto y crear la ventana (en modo ventana solo claro) un poco mayor según convenga para que el frame buffer siempre tenga valores como: 320x240, 800x600, 320x600... etc.
En aplicaciones 3d no se nota mucho, pero en aplicaciones 2d en modo ventana, como es tu caso, el fondo y todo lo demás se difuminará un poco si no tienes eso en cuenta. Creo que ya te lo puse en otro post, que si en tus ejemplos probabas con un fondo pixelado, luego en ejecución se notaba difuminado... eso es algo a evitar.

Más aún, si por error haces un SetViewPort a 800x600 al tener el frame buffer a 740x560 las consecuencias pueden ser inesperadas. En ese error caí yo y por eso un ejemplo mío daba como resultado en algunas tarjetas un montón de colorines en vez de lo que tenía que salir (ver post de "probarlo a ver si funciona").

Un saludo!

PD: Es una lástima que los querys no sean más genéricos. ¿Se te ocurre otro método, auque sea más lento, pero que amplie la gama de tarjetas que puedan realizarlo? Bueno, y que no sea el que ya discutimos sobre lockear a cada frame la textura.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Haddd

 Lo de la resolución y viewport no tiene nada que ver. Lo que ocurre es que EX3 tiene un rasterizador REF que debe ser una versión antigua y por eso aparecen estas cosas raras.

De toda la vida he podido tener un backbuffer en modo ventana, que para eso existe ese modo. B)

Lo que en realidad debe hacer el driver es utilizar el backbuffer del escritorio, que SIEMPRE es a pantalla completa, y utiliza un ViewPort del tamaño de la ventana.

Respecto a lo de no usar Querys de oclusión, pues no se me ocurre nada. Pero creo que son bastante compatibles ya. Es como hacer un motor sin pixel shaders porque hay gente que no tiene. Bueno, ya sabemos que hay gente que no los tiene, pero en el tiempo en el que un proyecto con el motor salga a la luz, ya será totalmente extendido. Ya sé que parece eso de, ¡que se $$%% los que no lo tienen !, pero no es así, es que el código es tremendamente más fácil de mantener, y yo tengo muuy poco tiempo.

Lo duro sería si hubiera puesto shaders 3.0 por defecto, eh?  :blink:

Bueno, nadie me comenta nada del framerate. ¿os baja mucho con/sin colision?






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.