PDA

Ver la versión completa : SDL y sprites



Acid-NN-9
28/06/2004, 17:41
Bueno pues mi problemo lo expongo para a ver si alguien tiene solucion, tambien veo k ai gente k le a pasado pero espero k me ayudeis ahora y pueda seguir,tambien como una imagen vale mas k mil palabras ai va,como veis e puesto un grafico en la pantalla pero se supone k el avioncito es amarillo no azul si alguien me puede decir d alguna forma como cargar paletas o solucionar esto le estaria eternamente agradecido,y a ver si termino el 1943 k tengo en proyecto,bueno decir k programo en SDL con el minigp la imagen es de 256 colores echa warramente con el paint xD

Gracias

Locke
28/06/2004, 18:56
A ver, si no recuerdo mal, la funcion de carga de imagenes te pide un parametro de entrada que es el tipo de imagen. Supongo que habras puesto RGB, prueba a poner GRB (creo que era esa, o si no alguna combinacion parecida con las letras) a ver si solucionas el problema.

Darumo
28/06/2004, 19:35
que yo recuerde (de cuando hice una funcion para qbasic para leer BMPs de 256c de eso hace años, aunque sigo teniendo el programa por aqui xD) los BMPs tienen los colores en el orden GBR como bien dice Locke

chui
28/06/2004, 19:56
Me imagino que has puesto el sprite sin adaptar a la pantalla/paleta actual.

Codigo ejemplo con SDL_image:

SDL_Surface *carga_imagen(char *nombre_fichero)
{
SDL_Surface *tmp, *ret=NULL;

tmp=IMG_Load(nombre_fichero);
if (tmp!=NULL)
{
ret=SDL_DisplayFormat(tmp);
SDL_FreeSurface(tmp);
}
return ret;
}


El truco esta en usar SDL_DisplayFormat para adaptar la imagen o sprite cargada del disco para adaptar al tipo de pantalla usado; si pusieses la pantalla en 16bits se veria bien pero no seria optimo, osea gastaria mas cpu cada pintado de los sprite.

Locke
28/06/2004, 19:59
Ahora que lo pienso, la funcion a la que me referia yo era de OpenGL, para hacer una textura a partir de una surface... como lo aprendi todo junto me he liado.

Sorry

chui
29/06/2004, 08:13
Acid-NN-9-> ¿Te ayudo el ejemplo?

Se me olvido decirte que si tienes una pantalla de 8 bit, SDL_DisplayFormat intentará adaptar los colores de tu sprite a la paleta actual, por lo que no se ven los colores de tu sprite al 100% igual, sino lo mas parecido posible; a menos que uses una misma paleta de 8 bit para todos los graficos.

Acid-NN-9
29/06/2004, 18:14
Ei no pude contestar antes, curro de noche con lo cual ahora mismo me tengo k ir, pero bueno, gracias a chui y todos los k habeis aportado algo pero entre yo y Distwave emos encontrado una solucion un poco bestia pero eficaz, usar la paleta de la GP32 k darkfader tiene en su web,Chui tu funcion hacia su labor (al menos eso parece)pero al adaptar el formato de la pantalla ala imagen ya lo hacia cargandola, tendria k haber sido al contrario adaptar la pantalla ala imagen,ademas al cambiar los colores el transparente cambia tambien, pero bueno ya esta solucionado,y para k nadie tenga problemas os pongo aki la paleta efectiva de la GP32 para k adapteis vuestros graficos sin miedo a error alguno con el PSP.

Gracias chui y todos!!!:D

Locke
29/06/2004, 18:15
Pues me gustaba mas en azul... :D

Acid-NN-9
29/06/2004, 18:23
jajajaja eso ya me lo a dicho mas de uno xD
aiva la paleta !!

Acid-NN-9
29/06/2004, 18:55
Ei ya k tamos en el tema podria alguien decirme las teclas de la GP32 en SDL osea eso de:

A-->
B-->
L-->
R-->
START--> SDLK_RETURN
SELECT-->
PAD-->


ASIAS DE NUEVO

Acid-NN-9
30/06/2004, 19:02
Bueno tengo otro problema con la funcion SDL_SetAlpha, no se si es por k no va o por si lo e echo mal alla va:
defino int i, y superficies
inicio SDL
el modo de video
cargo el grafico en image
defino el color transparente
y alla va con el problema
for (i=1 ; i<=100; i++){
SDL_SetAlpha(image, SDL_SRCALPHA, rand() % 255);
dest.x = rand() % 320;
dest.y = rand() % 240;
dest.w = image->w;
dest.h = image->h;
SDL_BlitSurface(image, NULL, screen, &dest);
}
SDL_Flip(screen);
con esto dibujo 100 graficos,vale, los graficos si kito la funcion SDL_SetAlpha me los dibuja perfectamente pero si la dejo como esta aki me sale la pantalla en negro por k se debe esto??? es al double buffer, no creo...

la cuestion es aprender! espero respuestas aisas!

Acid-NN-9
11/07/2004, 23:05
pero bueno coñe k pasa nadie va a contestar alas pekeñas dudillas??? toy loco de trastearlo y nada... xD

enga necesito alluditaaaa

Aiken
11/07/2004, 23:45
toi intrigao ... que intentas hacer con eso ... estas "bliteando" 100 imagenes unas encima de otras con alpha-blending?? vamos haciendo un merge de las imagenes o algo asi ???


por si te sirve de algo he visto esta nota en el manual de SDL

Note: Note that RGBA->RGBA blits (with SDL_SRCALPHA set) keep the alpha of the destination surface. This means that you cannot compose two arbitrary RGBA surfaces this way and get the result you would expect from "overlaying" them; the destination alpha will work as a mask.

Vamos, que tienes que tener cuidado con el alpha de la superficie destino, en tu caso la pantalla.

Aiken

Acid-NN-9
12/07/2004, 10:36
osea k no puedo subreponer 2 superficies arbitriarias y que trabajaria como mascara,por eso me sale la pantalla entera en negro,bueno lo k yo keria hacer era eso,poner 100 graficos y k cada uno tenga un alpha distinto, sin ningun objetivo en concreto solo para ver la funcion trabajar,aunke no se yo porque en windows va....

bueno si no es mucha molestia dime donde te as pillao el manual de SDL pa k por lo menos tenga referencia de algo, y si esta en pdf mejol xD


salu2