Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: osk on August 24, 2009, 09:44:34 AM

Title: Duda con set_glyph
Post by: osk on August 24, 2009, 09:44:34 AM
Hola.
Estoy probando un código (lo tenéis más abajo), que pretende mostrar cómo funciona set_glyph(), y resulta que he obtenido un resultado que no me esperaba (y creo que en Fénix no pasaba). La idea es asignar al glyph 65 (es decir, lo que sería la letra "A") de una fuente nueva mía un dibujo (un cuadrado gris). Y muestro por pantalla usando esa fuente mía la letra "A" pero también la "B". En teoría, al no haber definido ningún glyph para "B", no se debería ver nada, pero se ve otro cuadrado gris. Posteriormente sí que defino el glyph para "B" (el mismo cuadrado gris) y vuelvo a escribir "A B", y en ese momento, efectivamente, se me muestran los dos cuadrados.  Lo que quiero decir es que lo que se tendría que ver (si no lo entiendo mal), es primero un cuadrado y luego dos, cuando lo que aparece son dos cuadrados y luego dos. ¿Qué es lo que estoy interpretando mal?

Gracias.

PD: Estoy pesadito, ¿eh?

[code language="bennu"]
import "mod_map";
import "mod_key";
import "mod_draw";
import "mod_text";

process main()
private
    int font,map;
end
begin
//Genero un gráfico (un cuadrado gris)
map=new_map(10,10,32);
drawing_map(0,map);
drawing_color(rgb(100,100,100));
draw_box(0,0,9,9);                 
//Genero la fuente de 32 bits
font=new_fnt(32);
/*Este gráfico (el cuadrado gris) corresponderá al carácter 65 de la nueva fuente (El carácter 65 de la tabla ASCII corresponde a la "A"). SE SUPONE QUE como sólo se asigna este carácter, el resto de letras y símbolos no serán visibles ya que no estarán definidos para esta fuente: habría que hacer 255 set_glyph(), una por cada carácter de la nueva fuente creada*/                   
set_glyph(font,65,0,map);
/*Sólo imprimirá un cuadrado gris correspondiente a "A".  "B" no se escribirá porque no tiene asociado ningún símbolo de la fuente.<--LO QUE NO VA COMO PENSABA!!!*/
write(font,0,0,0, "A B");                       
//Ahora hago que "B" también se escriba como el mismo cuadrado gris                         
set_glyph(font,66,0,map);             
//Ahora se imprimen dos cuadrados grises.Ok             
write(font,0,20,0, "A B");                     
/*Guardo la fuente creada (que está en memoria), en el disco, para poderla utilizar posteriormente en otros programas como cualquier otra fuente.  */                                   
save_fnt(font,"mifuente.fnt");                                       
while(!key(_esc))frame; end
end
[/code]
Title: Re: Duda con set_glyph
Post by: SplinterGU on August 24, 2009, 11:45:27 AM
me hiciste dudar... a ver si viendo esto te das cuenta como funciona... (pulsa espacio para continuar)


import "mod_map";
import "mod_key";
import "mod_draw";
import "mod_text";
import "mod_video";

process main()
private
   int font,map;
end
begin

set_mode(640,480,32);
//Genero un gráfico (un cuadrado gris)
map=new_map(10,10,32);
drawing_map(0,map);
drawing_color(rgb(100,100,100));
draw_box(0,0,9,9);                 
//Genero la fuente de 32 bits
font=new_fnt(32);
/*Este gráfico (el cuadrado gris) corresponderá al carácter 65 de la nueva fuente (El carácter 65 de la tabla ASCII corresponde a la "A"). SE SUPONE QUE como sólo se asigna este carácter, el resto de letras y símbolos no serán visibles ya que no estarán definidos para esta fuente: habría que hacer 255 set_glyph(), una por cada carácter de la nueva fuente creada*/                   
set_glyph(font,65,0,map);
/*Sólo imprimirá un cuadrado gris correspondiente a "A".  "B" no se escribirá porque no tiene asociado ningún símbolo de la fuente.<--LO QUE NO VA COMO PENSABA!!!*/
write(font,0,0,0, "A B");                     

while (!key(_SPACE)) frame; end

//Ahora hago que "B" también se escriba como el mismo cuadrado gris                       
set_glyph(font,66,0,map);             
//Ahora se imprimen dos cuadrados grises.Ok           
write(font,0,20,0, "A B");                     
/*Guardo la fuente creada (que está en memoria), en el disco, para poderla utilizar posteriormente en otros programas como cualquier otra fuente.  */                                   
save_fnt(font,"mifuente.fnt");                                       
while(!key(_esc))frame; end
end


Funciona bien el set_glyph...
Title: Re: Duda con set_glyph
Post by: osk on August 24, 2009, 12:03:26 PM
¡Ostras, qué burro! Me faltaba un frame!
Muchas gracias!
Y perdona por molestar con esta tontería. Mecachis...



Title: Re: Duda con set_glyph
Post by: splinter_work on August 24, 2009, 01:13:30 PM
no, no es el frame lo que te falto...

los write se actualizan constantemente, en un write simple el texto persiste pero si cambias los fonts, lo mostrado en pantalla se actualiza...

por eso si te texto es "A B", cuando B no este definida no la va a mostrar, pero ni bien la definas, esta se mostrara sin necesidad de hacer un nuevo write.
Title: Re: Duda con set_glyph
Post by: Drumpi on August 24, 2009, 01:25:34 PM
Pues es una característica muy interesante... sobre todo para animar un scroll tileado :D
Si, ya se, rendimiento... aun tengo que probarlo ;)
Title: Re: Duda con set_glyph
Post by: DCelso on August 24, 2009, 04:22:34 PM
osk, estás a piñón con el tuto eh, se te ve más activo que nunca, diria yo. :D.
Title: Re: Duda con set_glyph
Post by: osk on August 24, 2009, 07:31:10 PM
Pues sí, pero voy muy lento.
En verdad lo único que hago es cambiar el formato del texto (hacerlo un poco más legible), modificar para Bennu los ejemplos y probarlos y poco más. Pero claro, 700 páginas...Lo estoy reorganizando un poquitín y voy a quitar cosas (ejemplos extensos de varias páginas que se pueden encontrar en otros sitios)...No sé, por ahora me está gustando, pero no creo que lo tenga listo hasta mediados del mes que viene.
Title: Re: Duda con set_glyph
Post by: DCelso on August 24, 2009, 08:51:48 PM
Sin prisas. Sigue preguntando todo lo que necesites, te va a quedar de lujo.
A mi el de fenix me encantó, creo, y creo que no creo mal :D, que es el único tutorial de programación completo que he visto hasta ahora, que te enseña totalmente de cero sin saber nada de nada, ni programar ni dibujar, ni animar, es estupendo para newbies y no tanto.
Title: Re: Duda con set_glyph
Post by: SplinterGU on August 24, 2009, 11:08:36 PM
:) fantastico, animo con eso, se necesita un monton!
Title: Re: Duda con set_glyph
Post by: DCelso on August 25, 2009, 08:42:46 PM
Actualizada wiki (http://wiki.bennugd.org/index.php?title=Write)
Title: Re: Duda con set_glyph
Post by: SplinterGU on August 26, 2009, 12:20:44 AM
gracias! te ganaste un karma!
Title: Re: Duda con set_glyph
Post by: Windgate on August 26, 2009, 11:33:56 AM
Oh, ahí está osk a la par que yo con el tuto xD

El mío será más corto sin duda (Voy por el tema 19 de 50 y tienen entre 2 y 4 páginas de extensión cada uno). De todas formas tomar el que había en Fénix y "portarlo" es buena idea, sí que estaba muy bien ;D
Title: Re: Duda con set_glyph
Post by: Windgate on September 02, 2009, 01:05:42 PM
drawing_color(rgb(100,100,100))

Ahora me entero de la existencia de una función rgb() a la que pasar los valores de color :( ... Si os digo que en mi visor 3D, para el dibujado de líneas establecía el valor de color escribiéndolo en binario en la calculadora de Windows y luego pasándolo a decimal... Y si os digo además que escribía 32 bits pensando que eran 8 para R,G,B y otros 8 para el alpha...

Pues bien, reiros de mí y cuando terminéis, quería comentaros un par de dudas, a ver si alguien me las sabe resolver porque he estado experimentando y siempre consigo cualquier color menos el que espero:

1) A rgb() se le pasan valores entre 0 y 100, ¿No? De menor a mayor saturación
2) Si estamos en modo de vídeo de 32 bits, ¿Tiene sentido seguir usando rgb() y se usa de la misma forma?
3) ¿En 32 bits hay alpha para el color de dibujado o ha sido una ilusión mía?

Asias :D
Title: Re: Duda con set_glyph
Post by: Drumpi on September 02, 2009, 01:17:53 PM
jajajaja ¿suficiente así?
Si cuando yo digo que nadie domina Bennu al completo lo digo por estas cosas. Tranquilo que le pasa a todo el mundo.

1) Si no ha cambiado la cosa, a rgb se le pasan valores entre 0 y 255, pues es el valor, traducido al binario, que se le da luego al color (8bits=256tonalidades por componente).
2) Si, se puede usar, teniendo en cuenta que devuelve un valor entre 0 y 2^16. No se si splinter lo ha modificado y en modo 32 bits devolverá valores de hasta 2^24 (no debería, por si usamos gráficos de 16bits en modos 32bits)
3) Me suena que si, que hay una funcion rgba(). De hecho, en mi vieja (viejísima) version de Bennu la tengo en mod_map: INT RGBA(BYTE, BYTE, BYTE, BYTE), igual que RGBA_GET.
Title: Re: Duda con set_glyph
Post by: Windgate on September 02, 2009, 03:53:03 PM
rgb() recibe entre 0 y 255??? Pero entonces el color es de 8+8+8 = 24 bits... ¿No? ¿Y si el modo de vídeo es de 16 cómo se come eso?

El tema del color es arduo... De momento voy a modificar el texturizado de mi visor porque toma valores RGB entre 0 y 100 y creo que por eso mi textura de madera parece un mojón con rayitas.
Title: Re: Duda con set_glyph
Post by: osk on September 02, 2009, 05:03:30 PM
A ver, rgb tiene tres parámetros: cantidad de R, cantidad de G y cantidad de B, desde 0 (nada) hasta 255 (todo). Y no hay transparencia. En cambio, rgba tiene un cuarto parámetro extra que es la alpha, desde 0 (totalmente transparente) hasta 255 (todo opaco). Por lo tanto, rgb() sería igual a rgba con el cuarto parámetro a 255.
Si el modo de vídeo es de 16 bits, creo yo (no lo sé) que rgba no tiene sentido, pero rgb continúa funcionando igual, de 0 a 255, sólo que internamente se le dedican 5 bits al R, 6 al G y 5 al B.
Title: Re: Duda con set_glyph
Post by: Windgate on September 02, 2009, 06:49:08 PM
Es peculiar... Porque habrá valores distintos aunque muy próximos para R,G y B que indicarán la misma saturación. Me imagino que al darle 8 bits de información a R siendo 5 los que necesita en realidad se ignorarán los 3 bits menos significativos y ya está...

Curiosa forma de implementarlo, pero es cómoda usar :P

A ver si saco un rato para probar las primitivas de dibujo en 32 bits con rgba()
Title: Re: Duda con set_glyph
Post by: Drumpi on September 02, 2009, 07:35:09 PM
Si, en teoría se redondea, pero dado que cada trajeta gráfica interpreta los colores como le da la gana (recordad que el modo 16bits es peculiar en ese aspecto, depende del HW, aunque no se note), sin mirar el código fuente puedo interpretar que busca el color más cercano para TU tarjeta gráfica. Es decir, que es posible que RGB devuelva un valor diferente para cada máquina, aunque le pases los mismos parámetros.

Lo que ya no se es si rgb tiene comportamientos distintos en modos 16 y 32 bits (da un valor de 0 a 2^16 ó 2^24 según el modo gráfico, o siempre hasta 2^16)
Title: Re: Duda con set_glyph
Post by: SplinterGU on September 03, 2009, 01:31:31 AM
16 bits suena 565?

se descartan los bits de menor peso...
Title: Re: Duda con set_glyph
Post by: Drumpi on September 03, 2009, 07:16:46 PM
Vale, entonces no se busca el más parecido segun la tarjeta gráfica, sino el redondeo más cercano :D
Title: Re: Duda con set_glyph
Post by: Windgate on September 03, 2009, 08:08:22 PM
Misteriosa informática, es como la alquimia, casi magia, la usamos sin comprender su fondo pero como magos que somos nos funciona...

EDIT: En muchos sentidos, lo del 5-6-5 truncado ha quedado claro :P
Title: Re: Duda con set_glyph
Post by: SplinterGU on September 04, 2009, 12:19:18 AM
no depende de la tarjeta grafica, sino del modo de video... y claro, se descartan los de menor peso... por eso son los serruchos en los graficos de 16bits...
pero es algo propio del modo 16, no de bennu ni de las placas de video.