2011-08-07 20 views

Respuesta

5

Este es un problema que generalmente se encuentra con bastante frecuencia, incluso en 3D.

No estoy muy familiarizado con Cocos2D, pero una forma de resolver esto en OpenGL genérico es llenar el framebuffer con su canal alfa deseado, cambiar el modo de fusión a glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA) y dibujar los rectángulos. La idea detrás de esto es dibujar un rectángulo con la transparencia deseada que se toma del framebuffer, pero en la máscara de progreso se dibuja el área para que los rectángulos subsiguientes se oculten allí.

Otro enfoque es convertir todo en una textura o ensamblar la forma con polígonos que no se superponen.

no estoy seguro de si es compatible con Cocos2D cualquiera de estos ...

+0

Sí, exactamente eso. Fyi puedes cambiar la función de mezcla en el sprite con la propiedad blendfunc. es decir 'mysprite.blendFunc = (ccBlendFunc) {GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA};' –

2

No sé qué capacidades específicamente Cocos2d proporciona, pero puedo ver dos opciones,

Uno, no se superponen así, pero en lugar de construir una geometría más compleja, de modo que cada píxel solo se cubra una vez,

Dos, utilice la memoria intermedia de estarcido para crear una máscara mientras dibuja, y para rechazar los píxeles que ya están enmascarados.