Hola.
Estoy probando la multitextura con alpha-blending (en OpenGL) para conseguir hacer lo siguiente:
Tener un poligono con 2 texturas, ambas a 255 de alpha y fadear en alpha la que estaría por "encima". Consigo hacerlo, pero me fadean las dos, he estado probando diferentes combinaciones con el glTextEnv y demas.
Solo consigo hacer otro efectos diferentes al que quiero, los tipicos de lightmaps, sistema de particulas,etc... Pero no encuentro la combinación para mantener una textura opaca y la otra poder fadearla.
¿Alguién sabe cual es?.
Gracias.
Buenas,
hace bastante que no toco nada de OpenGL, pero creo que esto te servirá:
pones los modos como si fueras a hacer un lightmap y antes de pintar la segunda textura, pones un glColor3f() con un valor en la escala de grises.
Creo que esto te funcionará.
VinCenT
¿Te refieres al blending para que dos imágenes con alpha una encima de otra se vean respetando la transparencia?
Fuente = SRCALPHA
Destino = INVSRCALPHA
Creo que lo que buscas es hacer una interpolación lineal entre 2 texture units (sin tener en cuenta para nada lo que hay en el framebuffer).
Dibujar con multitextura un poly con 2 texturas y poder hacer que el de por encima se vea menos o más
Para eso usa la extensión de env_combine para la texture unit de la textura que va por encima.
La activas con:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB);
Y luego establecer los parámetros:
GL_TEXTURE_ENV_COLOR
GL_SOURCE0_RGB_ARB
GL_SOURCE1_RGB_ARB
GL_OPERAND0_RGB_ARB
GL_OPERAND1_RGB_ARB
GL_OPERAND2_RGB_ARB
Hola.
Gracias, Ithaqua. Lo probaré cuando llegue a casa. Supongo que para cambiar el alpha valdrá con usar glColor ¿?.
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB);
glTexEnvi( GL_TEXTURE_ENV_COLOR, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB );
glTexEnvi( GL_TEXTURE_ENV_COLOR, GL_OPERAND0_RGB_ARB, GL_SRC_ALPHA );
glTexEnvi( GL_TEXTURE_ENV_COLOR, GL_SOURCE1_RGB_ARB, GL_TEXTURE );
glTexEnvi( GL_TEXTURE_ENV_COLOR, GL_OPERAND1_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
glTexEnvi( GL_TEXTURE_ENV_COLOR, GL_SOURCE2_RGB_ARB, GL_PRIMARY_COLOR_ARB );
glTexEnvi( GL_TEXTURE_ENV_COLOR, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR );
Con esto, consigo fader una textura, pero la de "abajo" sigue sin verse... ¿te sabes que parametros hay que colocar?
Saludos.
Yo creo que con un glColor4f(1.0, 1.0, 1.0, alfa) te tiene que valer. Esto es lo que queria decir en el otro post, no lo de la escala de grises... que me he liao!! :P
VinCenT
Hola.
Si valer me vale, con glColor fadea bien el alpha y demas, pero si uso 2 texturas para un mismo poligono, no consigo dejar una "intactacta" y la otra fadear a gusto, o las fadeo las dos o nada...
Y utilizar la función glTexEnv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color) donde color és float color[4] = {1.0, 1.0, 1.0, alfa}; ?
No lo he probado nunca, pero quizas es esto...
VinCenT.
el glColor4 tienes que ponerlo en cada activacion de textura si no recuerdo mal