¿Cómo establecer un valor global de fusión alfa en Direct3D 9?

¿Es posible establecer un valor alfa globalmente en Direct3D 9, que modula los valores alfa de píxeles de cada dibujo subsiguiente?

Me gustaría dejar que una escena completa se desvanezca. Sé que, por ejemplo, ID3DXSprite::Draw() te permite configurar esto en el parámetro Color , pero estoy usando sombreadores de píxeles para dibujar círculos y rectangularjs 2D, así que tendría que pasar el valor alfa a cada uno de ellos.

Con los sombreadores y las mezclas alfa normales, no creo que esto sea posible. Si quisiera replace todos los valores alfa de la escena por una constante global, podría usar D3DBLEND_BLENDFACTOR y D3DBLEND_INVBLENDFACTOR . Pero me parece que quieres multiplicar el valor alfa de cada píxel por una constante global. Esto se hace mejor en el sombreador de píxeles.

Dicho esto, desvanecer el alfa de cada elemento de la escena puede no ser lo que realmente quieres hacer. Producirá un efecto extraño ya que los objects opacos se volverán transparentes durante el desvanecimiento. Por ejemplo, un object escondido detrás de una panetworking será brevemente visible durante el desvanecimiento, ya que la panetworking y el object son parcialmente transparentes.

Si desea desvanecerse a un color constante (negro, blanco, etc.), un mejor enfoque puede ser simplemente renderizar un pase de pantalla completa de ese color sobre toda la escena, en lugar de alterar los valores alfa de cualquier cosa en la escena . Si desea desvanecerse en una escena diferente (como un fundido), la segunda escena debe dibujarse en un destino de renderizado fuera de la pantalla, y luego dibujar en un pase de pantalla completa sobre la primera escena.