2010-02-16 19 views
5

No estoy seguro de si hay un nombre para esto, pero esencialmente lo que tengo que hacer es tomar dos sprites opacos, dibujarlos con un 50% de opacidad, y donde se superponen, don ' T lo ves más oscuro.Representación de objetos translúcidos superpuestos sin superposición de oscurecimiento

Example Image http://i45.tinypic.com/n35281.gif

La imagen de la izquierda es como se hacía originalmente. Luego, quiero disminuir el alfa del renderizado, y de manera predeterminada, obtengo la imagen en el medio, pero quiero obtener la imagen a la derecha.

Estoy usando cocos2d en el iPhone y ahora estoy renderizando los sprites usando un Atlas Sprite Manager, que no tiene su propia alfa, así que he intentado disminuir el alfa disminuyendo el alfa de cada uno sprite individualmente y también disminuyendo el alfa de la imagen de origen, ninguno de los cuales realmente esperaba que funcionara.

¿Hay algún modo de fusión que pueda habilitar, o alguna forma (rápida) de convertir la imagen completamente opaca en un búfer secundario y luego disminuir la opacidad del búfer antes de mezclarlo con el búfer principal?

Respuesta

3

AFAIK no hay una manera fácil de solucionar esto. Las alternativas que puedo pensar son: -

  1. Modifique la geometría para que los objetos no se superpongan (lo más difícil de codificar, pero el rendimiento más alto).
  2. Renderice los objetos a una textura a plena opacidad, luego renderice esa mezcla alfa.
  3. Use una memoria intermedia de plantilla (si iPhone admite almacenamientos intermedios de plantilla que sospecho que no es así). Comience con la galería de símbolos configurada en ceros, configúrelo para escribir un 1 cuando dibuje sus polis translúcidos y configure la condición para dibujar solo el fragmento si el buffer es 0.
+0

El número 2 es exactamente lo que estoy pensando obra. Sin embargo, sería particularmente lento? –

+0

Es esencialmente lo que hace UIKit cuando configuras la opacidad de una UIView a menos de 1.0: la vista se procesa en su propio mapa de bits y luego se combina con la pantalla. Significa que estás haciendo el renderizado que eras para tus formas más otras 2 lecturas y 1 escritura por píxel del mapa de bits fuera de pantalla. Sospecho que estará bien siempre y cuando no estés haciendo todo para cada 'sprite' y no copies más píxeles de los que necesitas en la operación de mezcla. – U62

Cuestiones relacionadas