我正在使用Processing,我有这样的代码:
tint(255, alpha1--);
imp1.drawPlane();
tint(255, alpha2++);
imp2.drawPlane();
imp *是具有图像纹理的简单形状的对象:
void drawPlane() {
beginShape();
texture(texture);
vertex(x1, y1, z1, 0, 0);
vertex(x2, y2, z2, texture.width, 0);
vertex(x3, y3, z3, texture.width, texture.height);
vertex(x4, y4, z4, 0, texture.height);
endShape();
}
如果你想知道,纹理只是一个PImage .
我的问题:其中一个形状按预期反应,对其后面的形状是透明的,但另一个形状只与BACKGROUND(纯黑色场)混合而不是它后面的形状,并且当它背后的几何形状完全模糊时走在前面(当我降低它的alpha时,它将逐渐变暗,因为它与黑色背景混合) .
互联网有成千上万的处理透明度示例,如果背景被设置为某种东西,如何使图像透明,但是尽可能地冲刷,我找不到任何一个几何体对其后面的几何体透明的示例 .
我很高兴使用OPENGL或P3D画布类型 . 两者的行为都是一样的 .
编辑:根据关于noTint()的答案添加以下所有内容 .
代码现在执行此操作(并显示完全相同的损坏行为):
//before draw()
alpha1 = 255;
alpha2 = 1; //used to be 0, but 0 or 1 act the same
slideZ = -1;
//inside draw()
imp1.movePlane(slideLR, slideUD, slideZ);
tint(255, alpha1--);
imp1.drawPlane();
noTint();
imp2.movePlane(slideLR * -1, slideUD * -1, (slideZ * -1));
tint(255, alpha2++);
imp2.drawPlane();
noTint();
我还添加了“movePlane()”方法,因此您可以具体了解我对通过Z平面移动的几何形状的意义 .
我可能会尝试通过首先定义一个零无用的1x1图像平面来解决这个问题,看看它是否是第二个以及所有后续几何体是否获得适当的透明度(而第一个总是淡化为背景颜色,否则保持不透明) .
1 回答
我认为
tint()
将用于呼叫之下的所有内容,因此它们正在累积...尝试使用noTint()
之后隔离每个呼叫 .一个例子: