Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Realfire32 Sdl

Iniciado por TheAzazel, 16 de Febrero de 2004, 07:44:25 PM

« anterior - próximo »

TheAzazel

 Hace unos dias puse en la web un ejemplillo q tenia por hay dando vueltas..., lo he puesto en las noticias de stratos para que quien quiera...que le eche un ojo(no los dos! eh? jaja, o no podreis ver jajaja).
Se trata de un efecto de fuego en alta resolución y true color que utiliza algunos trucos y optimizaciones MMX y utiliza SDL. Teneis el codigo fuente y los proyectos para Visual Studio .NET, usarlo como querais pero si agradeceria criticas (cons- o des- tructivas..lo mismo da  :P).
Q os guste!!!
bye

TheAzazel

 Olvide lo indispensable :) , el link jaja (aunq se puede llegar por el enlace de a mi web desde este foro).

MegaStorm Systems

yo creo q esta vez no se me olvida nada...mmm ya veremos ;)
bye

Haddd

 Está muy bien, pero creo que se podría llegar a utilizar una superficie un poco más grande para que se viera más detalle. (ole)  

TheAzazel

 Se puede modificar levemente para crear superficies finales del tamaño deseado... yo no haria mas q un zoom de 2x...mas que nada pq si no se veria el pixelado muy feo. En este ejemplo va a 800x600 pq lo uso como fondo en algunas pantallas de descripciones en el HX (el juego q algun dia antes de fin de milenio estara terminado jaja) y el efecto queda muy chulo.
Tengo otro bueno de agua q tengo q preparar un poco y hacer el proyecto individual de el, en cuanto lo tenga lo pasare por aqui tambien, gracias haddd por probarlo B)  

TheAzazel

 Buenas!
para algunos de vosotros que visteis el efecto de fuego, os informo que acabo de subir una nueva version de el optimizada completamente en MMX, depende del micro q tengais... el aumento varia entre un 15% y hasta un 95% mas, para los que busqueis un ejemplo de alta optimizacion o un fuego q va a "toda leche", ahi lo teneis!
Por cierto, no tengo Pentium4... si alguien pudiera probarlo con q me diga a cuantos Ghz y la tarjeta de video q tiene me vale, supongo q sera mejor q un PentiumIII pero no lo se...
bueno, pues nada mas, a disfrutarlo ;)
bye

tamat

 No lo acabo de entender, sin desperecer el trabajo que este efecto implica mi pregunta es ¿donde está el interes general de esto? es un efecto que llevamos viendo desde hace decadas, usado hasta la saciedad, sin ningun misterio en cuanto a implementación y que tiene unas posibilidades nulas de integrarse en un juego.

Perdon si ha sonado a flame pero es lo que pienso.
Por un stratos menos tenso

TheAzazel

 Nada, de perdon nada, si internet es lo bueno q tiene.. q uno puede ser tan libre como desee ;).
A ver, no me has dicho nada q no sepa pero te explico la razon, no es el fuego en si, no es q Id vaya a usarlo en el doom5 ni nada por el estilo es simplemente un ejemplo para la gente q esta empezando donde puede ver (ya q creo q el codigo es bastante clarito) como hacer este tipo de cosas y lo mas importante... como se pueden optimizar ciertas cosas para q vuelen. Tu dices q has visto muchos fuegos por ahi verdad? te habras dado cuenta q aun siendo muy sencillos cada uno lo implementa a su manera verdad? pues busca uno q este completamente en MMX, alta resolucion, true color y que funcione en un P233MMX a velocidad razonable, ademas, eso de q no se puede utilizar en un juego es tan relativo como la vida misma... q impide a alguien colocarlo como fondo de un menu? para empezar... yo tengo algo por ahi q lo usa de ese modo, q a ti no te gusta? ok, perfecto, en gustos...colores.. pero como queda... a mi si me gusta.
Ademas, es casi como un tributo a la antigua forma de hacer las cosas, ya se q ahora todo el mundo piensa en "3D" y el resto son antiguedades sin sentido... esta claro q para ti no tiene ni razon, ni sentido, ni utilidad ni nada de nada... y te respeto pero... entiende q quizas haya alguien q si pueda sacarle un minimo partido.
Pues nada, espero haber resuelto tus incognitas :), wenas noses

tamat

 Sip, las has resuelto, hasta me has dado ganas de mirarme el codigo, nos vemos ;)
Por un stratos menos tenso

Haddd

 Muy bien Azazel, yo estoy contigo. No porque no esté a la última no tiene porque no tener interés.

TheAzazel

 Si en el fondo... muy pocos de nosotros descubrimos algo nuevo... mas o menos lo q hacemos es "reinventar" la rueda a nuestra manera pero no con animo de encontrar una solucion magistral y ser famoso jaja, si no con animo de aprender y porque nos gusta.
Respeto todas las opiniones y es mas, agradezco q me dijera eso pq si tamat lo penso asi... mas gente habra pensado mas o menos igual y de este modo.. al menos no se quedaran en sus cabezas esas cuestiones.. asiq tamat, soy d los q piensan q... lo q uno tiene en la cabeza... para que callarse? siempre q se digan las cosas con educacion... no problemo :), hasta me hizo gracia eso de flame... jejeje, pq se trataba de un "fire" jajajaja.
pos na mas... un saludo a todos!!

fiero

 Volviendo al tema del efecto, yo creia que se ponia la línea de abajo de forma aleatoria en cada frame, sin embargo tu haces otra cosa. ¿Podrias explicar un poquillo lo que haces en los primeros bucles, donde utilizas las funciones rand()?

Por otra parte, podrias implementar la función rand() con MMX y generar 2 números aleatorios a la vez, esto es más o menos lo que hace rand():


//Devuelve un número pseudoaleatorio entre 0 y RAND_MAX (0x7FFF)
int aleatorio(void)
{
static semilla;
if(semilla==0) semilla=time(NULL);

semilla=semilla*0x015A4E35;
return((semilla>>16)&0x7FFF);
}


Como ves, es solo una multiplicación y un desplazamiento. Con la instrucción PMADDWD se podrian generar 2 números aleatorios a la vez y generar la base del fuego en un flash....

un saludo
www.videopanoramas.com Videopanoramas 3D player

TheAzazel

 Por supuesto fiero, faltaria mas  :)
es mas, creo q tb lo añadire en el codigo pq tienes razon..ni un solo comentario jeje, como bien sabes, este efecto basicamente tiene 2 ingredientes, la forma en la q generes "la leña" y luego como "quemarla".

Empiezo por el final... como "quemarla".. hay tantas implementaciones como segundos un año..algunos
hacen la media de 4 pixeles en cruz hacia abajo, etc.. el mio hace la media de 8pixeles (se puede ver en la rutina mmx donde suma a edi +1,+401,etc.. hay dos pixeles q se suman dos veces. Aqui hay muchas combinaciones posibles.


Zaelsius

 Bueno, os comprendo a los dos. P.ej. cuando Haddd puso su COTW de clase vector tampoco le ví mucho sentido, pero cuando te tienes que hacer tú una nunca sobran ejemplos.

Por decir algo... el efecto fuego se ha vuelto a poner de moda últimamente, gracias a los pixel shaders y las texturas procedurales en tiempo real. Haddd para cuando un tuto con ese efecto?  :lol:  

tewe76

 
Citarmas o menos lo q hacemos es "reinventar" la rueda a nuestra manera

jope, eso de reinventar la rueda es la expresión de moda en el foro, no? en los últimos días la he escuchado por todos lados :)
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

TheAzazel

 EL OTRO POST SALE CORTADO, MENOS MAL Q LO GUARDO EN LA CACHE...BENDITO NAVEGADOR!!!  :D

Por supuesto fiero, faltaria mas  :)
es mas, creo q tb lo añadire en el codigo pq tienes razon..ni un solo comentario jeje, como bien sabes, este efecto basicamente tiene 3 ingredientes, la forma en la q generes "la leña" , como "quemarla" y la paleta grafica.

    Empiezo por el final... como "quemarla".. hay tantas implementaciones como segundos un año..algunos
hacen la media de 4 pixeles en cruz hacia abajo, etc.. el mio hace la media de 8pixeles (se puede ver en la rutina mmx donde suma a edi +1,+401,etc.. hay dos pixeles q se suman dos veces. Aqui hay muchas combinaciones posibles.

    Y ahora la "leña" q es lo q te interesa, siguiendo con la analogia de la leña..imagina q de cada tronco sale una llama vale? normalmente los fuegos solo generan un tronco de leña grande y lo "queman" con lo cual el efecto es bastante simplon pero te habras dado cuenta q en RealFire32 existe un #define FIRENUM 70, q ni mas ni menos indica el numero de llamas pequeñas(o numero de troncos), si pones 1 o 2 veras q solo aparecen como dos mechas, cada mecha se genera de forma independiente (de hay los bucles enlazados) y se mueven de forma aleatoria por la pantalla, con lo cual tenemos mechas q se mueven y q generan fuegos aleatorios... ahora bien..pon unas cuantas cuantas (yo uso 70 pero puedes poner mas y el fuego sera mas denso) y tendras un fuego bastante majo pq esta compuesto de 70 llamas independientes q interactuan entre ellas... vamos, casi casi como un fuego de verdad.
Eso es lo q hacen los dos bucles anidados, luego en el primero ves como q acoto unos valores:
if(fires[a]>389) fires[a]=(rand()%400)+10;
y
if(fires[a]<11) fires[a]=(rand()%400)+10;
eso es para mantener el fuego centrado en pantalla, si los eliminas veras q se reparte mas de forma aleatoria aunq si pones muchos FIRENUM como sera la cosa muy densa pues tampoco tendra mucho sentido.
Y creo q falta por explicar..el 1º bucle de todos:
for(a=0; a<1200; a++) fire_buffer[where++]=70;
eso lo q hace es q reinicia 1200pixeles(tres lineas de 400pixeles de ancho) a 70 q es otro valor con el q se puede jugar.
No se... lo mismo me he hecho un lio explicandolo aqui todo junto.. si te queda alguna duda...dimelo eh? :)
Lo de optimizar los rand()... lo primero es ver cuanto tiempo de CPU consumen (creo q bastante poco) por lo q hacerlo se podria hacer y como bien indicas con una sola instruccion... genero numeritos.., lastima q solo  2 pero de 32bits... y quien nos impide utilizarlos luego como 4 de 8bits? jeje asiq de un plumazo podriamos tener 4 rand() de 8bits q son validos en el ultimo bucle. Cdo tenga un hueco medire tiempos a ver.. y si lo haces tu..dimelo para q me ahorre el trabajo vale?
Sabes algo q si se puede tocar y obtener aun mas velocidad? no lo he puesto aqui para no liarlo y q se entienda bien pero es sencillo, al realizar el fuego...hacer el zoom x2 y colocarlo en el buffer final... nos ahorrariamos hacer todo el bucle entero para generar el zoom x2.. como dije en otro post yo uso este efecto para un fondo en unos menus y lo hago asi.. no se gana mucho pero si lo suficiente aunq claro...es menos legible :).
Pues nada... q lo diso... si hay algo q no entiendes... pregunta pregunta  (ole)
un saludo y taluegorr






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.