Muy buenas!!
Estoy probando metodos para hacer fades en GL... Al parecer el más habitual es colocar un QUAD en modo Ortho que ocupe toda la pantalla y darle el color, y obviamente la transparencia que quieras.
En fin los resultados que obtengo no son los esperados jejeje
Me pregunto si alguien que lo haya implementado podria comentarme algo sobre ello.
¿qué tipo de glBlendFunc es el adecuado para los fades?
En las pruebas que hice, por algun motivo no conseguia variar el factor de transparencia del QUAD (Antes de dibujar, hacia un glColor4f() con el alpha apropiado) saliendome siempre "igual" de transparente este.
¿Realmente esta es la forma adecuada de hacerlo, o existen otras mas eficaces o rapidas?
Muchas gracias de antemano!!
Las funciones de mezcla son para la fuente GL_SRC_ALPHA y para la de destino GL_ONE_MINUS_SRC_ALPHA
Por supuesto no olvides activar el blending...
Saludos
OK, Hoy ya es tarde para probarlo, pero mañana ya lo mirare y te comento si funciona!
Gracias Berserker!
Efectivamente con esas funciones de Blend consigo el efecto deseado, gracias de nuevo.
Ahora lo que ocurre es que al activar el Blend, me queda una antiestetica linea que cruza la pantalla, fruto de los 2 triangulos que forman el GL_QUAD...
He probado con glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); pero no parece afectar a los poligonos dibujados despues del glEnable(GL_BLEND);
Alguna sugerencia para quitar esa linea?
Thanks! ;)
...por cierto, una cosilla más:
Me interesaria guardar en unas variables los colores actuales con los que se limpian los buffers (glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); )
Para ello, segun la MSDN puedo usar glGetfloatv(GL_COLOR_CLEAR_VALUE, GLfloat* params);
La susodicha MSDN dice que la funcion retorna 4 floats, pero no tengo manera de sacarlos, el puntero a float solo me contiene el primer color (rojo)
He probado con arrays, punteros, incluso con llamadas sucesivas a la funcion, para ver si los devolvia 1 por 1, pero nada, siempre me devuelve el rojo....
Alguien sabe como sacar los 4 colores que se esten usando actualmente para limpiar el fondo?
No me acuerdo muy bien pero juraría recordar que las componentes se sacan de param[0], param[1], param[2] y param[3].
es como dice pastor.. params
Cierto, ya lo consegui!
Gracias a ambos.
P.D Alguien tiene idea de lo de la linea que sale al activar el blend?
Bueno, ya todo quedo solucionado.
La linea que me aparecia era por tener activado el suavizado de poligonos GL_POLYGON_SMOOTH.
Thanks a lot!!
Pero tio no quedes esto asi xD di q es por un bug de los drivers de ati q si no la gente se piensa q opengl pone rayas donde no las hay xDDD.
OGL no hace nada, solo le dice al so y al tarjeto qe hacer.. es ya culpa del programador sino sabe explicarselo bien, o de las dos ultimas si fallan.
En cambio, directx si es culpable de si misma xD
no, es q en este caso concreto es un bug de los drivers de ati.
Ethernet, no es posible que sea un Bug de los drivers de ATI. La linea diagonal aparece con cualquier tarjeta si activas el antialiasing de poligonos.
Acabo de probarlo con nVidia's, incluso con tarjetas SiS o Chips And Techs, que no tienen soporte hardware de GL.
Supongo que es el efecto normal, al aplicar el antialias de poligonos, suaviza los bordes de los triangulos, y por eso, si tienes la transparencia activada, se ven.
Por otro lado, la Radeon 8500 es una tarjeta con mucho tiempo ya, y los ultimos Drivers son estables.
Saludos!!
Pa mi qe windows tiene algo qe ver :X9: :X9: :X9:
wow ;) sigo sin entender por q si tienes un cuadrado aparecen dos triangulos, a pesar de q las graficas solo rendericen triangulos.
Pues Salen 2 triangulos por eso que tu mismo dices, porque el Quad queda internamente representado por 2 triangulos.
De todas formas puedes hacer la prueba renderizando una escena cualquiera con el GL_POLYGON_SMOOTH y el GL_BLEND activados, y veras como se ven todas las caras de los poligonos.
Respecto a lo de Windows, pues al probar en diferentes tarjetas, tambien probe en diferentes SOs y salia en todos...
Saludos!