Bien, una vez resuelto el blending para que el sprite me ilumine el fondo, he decidido utilizar el Specular para darle más fuerza.
Según tengo entendido, para que veamos un color, DX8 calcular primero el valor del texel realizando la operación que le indicamos, normalmente modular textura y diffuse, y después le suma el Specular. Algo así:
Texel Final=(Texel Modulate Diffuse)+Specular
Por eso, si queremos iluminar un sprite, debemos aumentar su specular, y si queremos oscurecerlo, disminuimos su diffuse.
Esto funciona, pero...Si utilizo el specular siguiente:
Specular=ARGB(0,255,255,255)
Ocurre un problema, y es que no me respeta el Alpha, y el sprite en lugar de aparecer con la forma del foco de luz, me aparece un rectángulo, como si no tuviera transparencia. Y eso sí, me sale más iluminado...
¿Alguien sabe qué hago mal o qué puedo hacer para solventar el problema?
Hola Dracula!! :sonriendo:
Pues la única solución que veo para tu problema es usar AlphaTest. Como haces blending aditivo, el lugar donde no se debe ver la especular sera en el negro puro, no? Aunque haya un pixel que tenga RGB111, por lógica ya debería tener la especular. Yo pondría un:
glAlphaFunc( GL_NOTEQUAL, 0.0f );
Siento no saber el código en DirectX ^_^'
En fin, espero haberte ayudado.
Un saludete!!
< MChiz >
Lo he probado y no parece funcionar. Parece como si el specular tuviera SIEMPRE un Alpha de 255!!
Yo he tenido el mismo problema trabajando en 3D. Parece ser que las transparencias y el specular no se llevan bien. De todos modos, ¿no se supone que la luz specular depende del angulo de la camara y las superficies? si estas trabajando en 2D no entiendo pq intentas usar el specular...
Quiero utilizar el specular para que el sprite se ilumine!
No puedes usar el specular para generar transparencias. ¿Por que no usas un canal alpha para el sprite? Sería lo mas lógico.
Saludos, Ithaqua.
http://ithaqua.stravaganza.org
Hmm creo que la componente alpha del specular no entra en juego a la hora de calcular el valor final del color...más bien el problema puede estar al haber una saturación de color al especificar el color blanco puro para el specular. ¿Te pasa lo mismo si utilizas por ejemplo (128, 128, 128)?
Por ahora eso es todo lo que puedo decir...
Un saludo
No ithaqua, yo tengo solucionado el problema de la transparencia con un canal alpha en la textura.
El problema es que al usar el specular, parece que se desentiende totalmente del alpha de la textura, cuando no debería ser así!
En cambio si quito el specular todo funciona bien.
¿ideas?
Joder...esto ya es casualidad :riendo:, hemos puesto el post al mismo tiempo xDDDD
Jejeej...
Sí que me pasa bajando los valores. Da la sensación de que al usar el Specular, NO respeta el Alpha que había en ese momento.
Pero...¡no tiene sentido!
Es extraño...he probado a ponerle el specular al codigo que puse aquí y funciona casi bien...la única diferencia con el anterior es que al lightmap le meto un canal alpha. Lo que pasa es que si le meto un valor specular cercano al blanco, a parte de que no se ve nada (sólo el blanco del foco de luz), pues se puede distinguir un poco los bordes del polígono que contiene el lightmap...
Un saludo
Aquí pongo el código por si a alguien le interesa echarle un vistazo.
Un saludo.