Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Cargar Una Imagen En Una Surface Ya Creada

Iniciado por KACHORRO, 17 de Septiembre de 2005, 08:53:10 PM

« anterior - próximo »

Ray

Cita de: "KACHORRO"Mi pregunta es si hay alguna forma de leer del disco y pasar a la surface directamente sin tener que hacer un BitBlt entre medias.
Bloquear una surface y copiar en ella lo que quieras es perfectamente posible que yo sepa.

un saludo.

KACHORRO

 Bueno... voy a probar comprimiendo las imágenes.
¿Qué formato de compresión sin pérdida me recomendais para 24 bits de color?

Zaelsius

Cita de: "KACHORRO"Bueno... voy a probar comprimiendo las imágenes.
¿Qué formato de compresión sin pérdida me recomendais para 24 bits de color?
PNG

TheAzazel

 Te recomiendo que en lugar de utilizar 24bits de color...utilices o bien 16 o 32.
24bits es un modo un tanto "extraño" y bastante lento que los dos anteriores....

Para comprimir tus imagenes sin perdida... tienes varias opciones... puedes pasarlas por un algoritmo RLE que a veces comprime bien aunque si no quieres complicaciones y quieres buena compresion...utiliza por ejemplo la lib UCL (http://www.oberhumer.com/opensource/ucl/).
UCL comprime un poco menos que un winzip normal y corriente(lib zlib) pero la descompresion es rapidisima! yo es la que utilizo para empaquetar los recursos :P

Por cierto, que estais utilizando para el game? DirectX? alguna lib? SDL? te lo digo porque tengo una lib que lo mismo has leido algo por aqui...utiliza SDL, es portable y estas cosillas te las quitarias de encima(esto de comprimir y demas) a parte de mas añadidos....

KACHORRO

 Muchas gracias por todos los consejos y opiniones.


fiero

 Con un JPG al 95% ni se va a notar la diferencia con la original, y la diferencia de tamaño va a ser enorme, comparando con un formato sin pérdida.

saludos
www.videopanoramas.com Videopanoramas 3D player

KACHORRO

 He añadido FreeImage al programa y he cambiado los gráficos a PNG (antes usaba BMP sin compresión XDDD)
es decir, donde antes me ocupaba un fichero 1,7 megas ahora me ocupa unos cuantos k's.

No obstante he estado haciendo pruebas y tengo dos problemas:

1. FreeImage no carga bien los PNG ni los GIF (no he probado mas), solo me ha cargado bien los BMP (teniendo en cuenta que despues de cargarlos los tengo que copiar a la surface de ddraw , y puede que ahí esté yo metiendo la pata...)

2. El corte me lo da sin lugar a dudas por el acceso a disco, y es igual de molesto para BMP de 1 mega y pico como para PNG's de 5 ks... necesito una solución que suavice cuanto más los cortes, teniendo en cuenta que es inevitable cargar las imágenes sobre la marcha. (¿tenerlas en memoria en formato comprimido y descomprimirlas al necesitarlas?)

Ayuda !!!

                          Enrique Garcia (http://kachorro.servegame.com/abadia2/)

[EX3]

 No logro bajarme el video ni ver las imagenes de los mapas :(

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

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

KACHORRO

 El servidor FTP es mio y falla más que una escopeta de feria. No obstante espero que cuando leas esto ya hayas podido descargar los archivos que comentas.

Un saludo

[EX3]

 Ya logre ver el video! Me gusta el nuevo sistema que vas a implementar para la abadia del crimen, un pseudo-3D muy majo (ole)

Recuerdo hace tiempo que encontre por sorpresa un render 3D de una escena del juego que por lo visto iban a remakear en 3D puro aunque no se que paso con dicho proyecto:
http://usuarios.lycos.es/vhd/ex3/abadia3D.jpg

La imagen original no tiene el paisaje y se veia algo peor de iluminacion, esta un poco mas contrastada e iluminada. Todo esto se lo añadi yo via photoshop para montarme un fondo de escritorio decente que poner :D

Animo con el proyecto que va tomando un camino muy interesante ;)

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

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

Ray

 
Cita de: "KACHORRO"Ayuda !!!
Me gustaría hacer unas preguntas antes de intentar ayudarte.

1- ¿Estas usando DirectX 9, cierto?

2- ¿que ancho y alto en pixels tiene cada celda o superfice?

3- ¿Cuantos colores diferentes tiene el mapa aproximadamente?, por la reducción tan enorme que se produce al comprimir en png deben ser poquitos ¿no?, ¿4?, ¿16?, ¿256?...

4- ¿El mapa ese para qué es concretamente?, ¿no es un juego en 3D?

pues eso.

...Que gran juego, fue uno de mis favoritos, ojalá os salga bién.

TheAzazel

 Hay una cosa que no entiendo... porque quieres tener ese pedazo de mapa cargado en memoria??
lo suyo seria que cargaras todos los elementos graficos y luego...los fueras volcando depende de donde estes...

que quieres un scroll super suave? pues... construye con estos elementos graficos en un buffer mayor(backbuffer) que la resolucion del juego y luego vuelcas el marco que quieras y podras moverte pixel a pixel por el... que te aproximas al borde de los "construido" pues...vuelves a generar otro backbuffer y fuera...

no se si me he explicado bien  :blink:  

KACHORRO

 Respondo a Ray

1- ¿Estas usando DirectX 9, cierto?
No sé si el 9 o el 8 o el 7 :P, pero simple y llano directdraw

2- ¿que ancho y alto en pixels tiene cada celda o superfice?
dado que quiero mostrar el mínimo de celdas simultáneamente (es decir, tener el mínimo en memoria), cada celda tiene el tamaño de la pantalla, lo cual hace que con 4 no sea necesario tener más.

3- ¿Cuantos colores diferentes tiene el mapa aproximadamente?, por la reducción tan enorme que se produce al comprimir en png deben ser poquitos ¿no?, ¿4?, ¿16?, ¿256?...
Ahora en las pruebas son dibujos muy básicos, por eso se reducen tanto. En los definitivos tendran 32 bits de color.

4- ¿El mapa ese para qué es concretamente?, ¿no es un juego en 3D?
Es el suelo de un juego en isometrica 2D


KACHORRO

 porque quieres tener ese pedazo de mapa cargado en memoria??
lo suyo seria que cargaras todos los elementos graficos y luego...los fueras volcando depende de donde estes...

no quiero tenerlo cargado en memoria, quiero ir cargandolo del disco poco a poco según se mueva la cámara.

Ray

 Primero yo te recomendaría empezar a hacerlo en la ultima versión de Direct3D ahora que estás a tiempo, si no, creo que puedes tener problemas al usar tu juego en una tarjeta gráfica diferente a la que uses para programar y hacer las pruebas, aunque esto me gustaría que lo pudiera corroborar alguien más porque solo te hablo por experiencia propia, en concreto me refiero a la diferencia entre nVidia y ATI, creo que la versión 9 está más unificada en cuanto a compatibilidad.

Crea las surfaces (y por lo tanto cada archivo) de un tamaño igual de ancho que de alto y que sea potencia de 2 para que sean mas rápidas, por ejemplo 1024x1024 está bien. El mapa tendría que ser múltiplo de 1024 para facilitar su división con lo que deberías convertirlo a 8192 x 10240

De esta manera quedan 8 columnas x 10 filas = 80 surfaces, de 1024 x 1024 cada una

Si fuera posible sustituye el formato de color del mapa por una paleta de 8 bits de color, podrás usar un máximo de 256 colores diferentes pero cada uno de ellos podrá ser de 32 bits o los que quieras, quedará prácticamente igual ocupando una tercera parte.

De momento prueba a ver como va con archivos de 1024x1024 por que puedes ganar mucha velocidad.

De lo de ahorrar tanta memoria no creo que sea buena idea, creo que no le va a hacer mucha gracia al que se haya gastado un pastón en su P4 con 1Gb ver como el juego esta cargando cada vez que avanza un poco, los parones aunque sean pequeños suelen ser molestos, además supongamos que el jugador se desplaza por los alrededores del punto crítico de cambio de surface, y como por lo general se cargarán de 2 en 2, el tener que cargar consecutivamente semejantes imagenes puede tener unos efectos odiosos en el mejor de los casos.

Por lo tanto, mi alternativa es:

Crear un número adecuado de surfaces en la memoria de sistema (10, 20, 30... 50...) dependiendo de la memoria de sistema del ordenador de está forma además quedaría disponible toda la memoria de video.

Cargar del disco a las surfaces las más usadas al comienzo del juego, progresivamente deberán irse cargando grupos de archivos a medida que se avanza pero solo será necesario una vez (al menos cada cierto tiempo).

ya.






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.