Lluvia y nieve en Bennu 3D

Started by Windgate, November 02, 2009, 01:14:13 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Aquí les dejo un sencillo código para conseguir lluvia y nieve, uso algunos parámetros fijos como la posición del foco de lluvia, pero bueno, cuestión de modificarlos y ya está.

Primero las capturas:



Y aquí el código:

PROCESS lluvia ( )
PRIVATE
int lluvia;
BEGIN
lluvia = M8E_PARTICLEADDBOXEMITTER (
-1000 , 0 , -1000 , // Posición x, y, z
1000 , 1000 , 1000 , // Lados
0.0 , 0.0 , 0.0 , // Dirección de la longitud del cilindro
2000 , 4000 , // Partículas por segundo, mínimo y máximo
0 , 196 , 196 , 196 , // Mínimo alpha RGB
0 , 196 , 196 , 255 , // Máximo alpha RGB
2000 , 4000 , // Tiempo de vida mínimo y máximo
45 // Máximo ángulo de desviación
);
M8E_PARTICLESETSIZE ( lluvia , 4 , 4 );
M8E_PARTICLEADDFADEOUTAFFECTOR ( lluvia , 0 , 196 , 196 , 225 , 1000 ); //(particle,alpha,r,g,b,timeFadeOut)
M8E_PARTICLEADDGRAVITYAFFECTOR ( lluvia , _GRAVEDAD/8 , _GRAVEDAD/4 , _GRAVEDAD/8 , 0 );
M8E_MODELSETMATERIAL ( lluvia , EMF_LIGHTING , FALSE );
M8E_MODELSETMATERIAL ( lluvia , EMF_ZWRITE_ENABLE , FALSE );
M8E_LOADTEXMODEL ( lluvia , M8E_LOADTEXTURE ( "png/rain8.png" ) );
M8E_MODELMATTYPE ( lluvia , EMT_TRANSPARENT_VERTEX_ALPHA );//
END


PROCESS nieve ( )
PRIVATE
int nieve;
BEGIN
nieve = M8E_PARTICLEADDBOXEMITTER (
-1000 , 0 , -1000 , // Posición x, y, z
1000 , 1000 , 1000 , // Lados
0.0 , 0.0 , 0.0 , // Dirección de la longitud del cilindro
2000 , 4000 , // Partículas por segundo, mínimo y máximo
0 , 196 , 196 , 196 , // Mínimo alpha RGB
0 , 255 , 255 , 255 , // Máximo alpha RGB
2000 , 4000 , // Tiempo de vida mínimo y máximo
45 // Máximo ángulo de desviación
);
M8E_PARTICLESETSIZE ( nieve , 8 , 8 );
M8E_PARTICLEADDFADEOUTAFFECTOR ( nieve , 0 , 225 , 225 , 225 , 1000 ); //(particle,alpha,r,g,b,timeFadeOut)
M8E_PARTICLEADDGRAVITYAFFECTOR ( nieve , 0 , -1 , 0 , 0 );
M8E_MODELSETMATERIAL ( nieve , EMF_LIGHTING , FALSE );
M8E_MODELSETMATERIAL ( nieve , EMF_ZWRITE_ENABLE , FALSE );
M8E_LOADTEXMODEL ( nieve , M8E_LOADTEXTURE ( "png/snow16.png" ) );
M8E_MODELMATTYPE ( nieve , EMT_TRANSPARENT_VERTEX_ALPHA );//
END


Para los gráficos no hace falta mucha imaginación, una bolita blanca con degradado radial a negro para la nieve y una simple línea blanca para la lluvia.

Espero que lo disfrutéis y si encontráis alguna sugerencia de mejora no dudéis en comentarla.

Próximo paso: ¡Relámpagos!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Windgate

Añado el código para la tormenta, por supuesto los wav tenéis que ponerlos vosotros:

PROCESS relampago ( )
PRIVATE
int relampago;
BEGIN
relampago = M8E_GUIADDFADER();
M8E_GUIFADERINSET ( relampago , 255 , 255 , 255 , 255 , 1000 );
END

PROCESS tormenta ( int prob )
BEGIN
LOOP
IF ( rand ( 1 , 1000 ) < prob )
relampago ( );
play_wav ( sfx [ _STORM ] [ rand ( 0 , 3 ) ] , 0 );
END
FRAME;
END
END
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

blostec

Muchas gracias Windgate, seguro que a mas de uno le son de gran utilidad. Saludos!

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

l1nk3rn3l

Inclui el ejemplo de lluvia y nieve mas optimizado en la pagina de bennu3d
dentro de poco incluire mas .. ya que los estoy mejorando..

puedes ver nuevas optimizaciones...

http://3dm8ee.blogspot.com/

Windgate

Visto l1nk, puedes coger lo que quieras, si quieres el de los droides también cuélgalo y si voy sacando algo nuevo tienes mi permiso :P

Y cualquier modificación que hagas bienvenida es.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

l1nk3rn3l

 ;D
gracias,,


aunque lo iba a subir sin permiso , ya que son ejemplos invaluables , y mas con IA.


actualice el ejemplo y ahora no tiene errores ni siquiera al limpiar la escena con la tecla N

:o

Windgate

Cielos, tendré que probarlo, maldita sea, ahora ya sin vacaciones... Espero que este fin de semana vuelva a sacar la bestia que llevo dentro y le sacuda una buena dentellada a todo lo nuevo, arf, arf, arf... :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es