anibarro
26/04/2005, 12:13
Buenas, me he quedado sin ideas para idear una función que haga efecto niebla y buscando en el google no he encontrado ninguna función, más que nada porque no se q palabras poner a buscar (fog algorithm, algoritmo niebla...)...
Weno el caso es que, teniendo la distancia a la que esta en el mundo 3D cada pixel de la pantalla, quiero cambiar su color (trabajando en 16bits) para conseguir un efecto niebla a ser posible de tipo exponencial y eligiendo el color de la niebla.
De momento tengo esto:
if( ((y_distance)>>23) > niebla.r) // para q no me oscurezca los pixels mas cercanos
niebla.r=((niebla.r+((y_distance)>>23))>>1); //rojo=(rojo+distancia)/2
if( ((y_distance)>>23) > niebla.g)
niebla.g=((niebla.g+((y_distance)>>23))>>1);
if( ((y_distance)>>23) > niebla.b)
niebla.b=((niebla.b+((y_distance)>>23))>>1);
if (niebla.r>31) niebla.r=31;//asegurarme de q ninguno se sale del rango
if (niebla.g>31) niebla.g=31;
if (niebla.b>31) niebla.b=31;
y_distance es un numero enormisimo que viene de unas tablas y tal, que desplazado 23 bits a la derecha tiene un rango de 0 a 60, asegurandome que la media del punto mas lejano sea 31 (blanco del todo).
Y ahora lo que quiero es una formula que me permita ir acercando los valores de un pixel, r, g, b, a otros que yo le de, en función de la distancia y de forma exponencial a ser posible.
Es decir, si un pixel en la pantalla es verdoso r=4, g=30, b=10 y mi color de niebla es rojo r=31, g=0, b=0, ir transformando el color del pixel al color de la niebla en función de la distancia de forma proporcional o exponencialmente que seria lo ideal, ¿a alguien se le ocurre como? pq yo ya estoy falto de ideas :shock:
gracias ;)
Weno el caso es que, teniendo la distancia a la que esta en el mundo 3D cada pixel de la pantalla, quiero cambiar su color (trabajando en 16bits) para conseguir un efecto niebla a ser posible de tipo exponencial y eligiendo el color de la niebla.
De momento tengo esto:
if( ((y_distance)>>23) > niebla.r) // para q no me oscurezca los pixels mas cercanos
niebla.r=((niebla.r+((y_distance)>>23))>>1); //rojo=(rojo+distancia)/2
if( ((y_distance)>>23) > niebla.g)
niebla.g=((niebla.g+((y_distance)>>23))>>1);
if( ((y_distance)>>23) > niebla.b)
niebla.b=((niebla.b+((y_distance)>>23))>>1);
if (niebla.r>31) niebla.r=31;//asegurarme de q ninguno se sale del rango
if (niebla.g>31) niebla.g=31;
if (niebla.b>31) niebla.b=31;
y_distance es un numero enormisimo que viene de unas tablas y tal, que desplazado 23 bits a la derecha tiene un rango de 0 a 60, asegurandome que la media del punto mas lejano sea 31 (blanco del todo).
Y ahora lo que quiero es una formula que me permita ir acercando los valores de un pixel, r, g, b, a otros que yo le de, en función de la distancia y de forma exponencial a ser posible.
Es decir, si un pixel en la pantalla es verdoso r=4, g=30, b=10 y mi color de niebla es rojo r=31, g=0, b=0, ir transformando el color del pixel al color de la niebla en función de la distancia de forma proporcional o exponencialmente que seria lo ideal, ¿a alguien se le ocurre como? pq yo ya estoy falto de ideas :shock:
gracias ;)