Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Alphatest

Iniciado por Haddd, 13 de Noviembre de 2004, 08:03:58 PM

« anterior - próximo »

Haddd

 Es la primera vez que utilizo AlphaTest. Según tengo entendido, lo que hace es que si el valor con el que se compara supera la función indicada, el pixel se guarda.

Biien, yo tengo una textura donde el alpha es o 0 o 255. Entonces quiero que donde sea 0 que no pase la función.

Pues pongo:
  ALPHAREF=1;
  ALPHATESTENABLE=true;
  ALPHAFUNC=GREATEREQUAL;


y funciona, pero si pongo en AlphaRef=255, no funciona . :blink:

Entonces, mi duda es:

¿Qué formato se utiliza en AlphaRef ? ¿A8R8G8B8? ¿Sólo el Alpha ? ¿porqué no me funciona con 255 ?

Pogacha

 Tambien me interesa pero para OpenGL.

Esto es muy util, para objetos como hojas (o slides de un arbol ?), rejas o cosas asi.

Supuestamente con esto, no es necesario usar el alpha blending como asi tampoco ordenar los billboards para los casos que el alpha channel es 0 o 255 .

Tengo entendido que existe la funcion alpha test que compara el alpha que setearias en el pixel con el alpha que tiene la pantalla y asi hace lo mismo que el stencil buffer.

Pero creo que hay otra funcion que compara el alpha del pixel con un alpha estatico, pero no estoy seguro, no se como se haria sin esto en los modos de 16 bits donde en el framebuffer no hay canal alfa.

Tambien se que las funciones son configurables como las del zbuffer <=, >=, <, > o =.

Si alguien puede aportar me ayudaria mucho.

Saludos.

Pogacha

 OPENGL apart:

Era mas sencillo de lo que creía, pero nunca lo habia usado.

http://www.opengl.org/documentation/specs/...1.1/node96.html

Citar
This step applies only in RGBA mode. In color index mode, proceed to the next step. The alpha test discards a fragment conditional on the outcome of a comparison between the incoming fragment's alpha value and a constant value. The comparison is enabled or disabled with the generic Enable  and Disable  commands using the symbolic constant ALPHA_TEST. When disabled, it is as if the comparison always passes. The test is controlled with

void AlphaFunc ( enum func, clampf ref ) ;

func is a symbolic constant indicating the alpha test function; ref is a reference value. ref is clamped to lie in , and then converted to a fixed-point value according to the rules given for an A component in section 2.13.9. For purposes of the alpha test, the fragment's alpha value is also rounded to the nearest integer. The possible constants specifying the test function are NEVER, ALWAYS, LESS, LEQUAL, EQUAL, GEQUAL, GREATER, or NOTEQUAL, meaning pass the fragment never, always, if the fragment's alpha value is less than, less than or equal to, equal to, greater than or equal to, greater than, or not equal to the reference value, respectively.

The required state consists of the floating-point reference value, an eight-valued integer indicating the comparison function, and a bit indicating if the comparison is enabled or disabled. The initial state is for the reference value to be 0 and the function to be ALWAYS. Initially, the alpha test is disabled.

Haddd

 Sí que es necesario que utilices el alphablending para porder hacer transparencias. (ole)  

Pogacha

 No se si quedo claro, supongo que tu debes saberlo pero para el resto.

Esta el alfa blending que es una funcion de mezcla de colores segun el canal alfa, utilizado para generar transparencias.
La mas comun es la  Source * Source_Alpha + Dest * (1-Source_Alpha).
Ya que existe esto algunos decidieron premultiplicar la textura por el canal alfa y dejar Source + Dest * (1-Source_Alpha).

Siendo nada que ver con lo anterior, esta el alpha test, que consiste en saltearse la escritura tanto en el zbuffer como en el framebuffer cuando se cumple una condicion de comparacion con el canal alfa y un valor constante.

Saludos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.