【发布时间】:2014-08-25 22:35:44
【问题描述】:
在 libGdx 中,我正在尝试创建形状纹理:获取完全可见的矩形纹理并对其进行遮罩以获得形状纹理,如下所示:
在这里我在矩形上测试它,但我想在任何形状上使用它。我查看了this tutorial 并提出了一个想法,首先绘制纹理,然后绘制具有淡化功能的蒙版:
batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_ALPHA);
- GL20.GL_ZERO - 因为我真的不想从蒙版中绘制任何像素
- GL20.GL_SRC_ALPHA - 从原始纹理中,我只想绘制蒙版可见的那些像素(= 白色)。
测试代码的关键部分:
batch0.enableBlending();
batch0.begin();
batch0.draw(original, 0, 0); //to see the original
batch0.draw(mask, width1, 0); //and the mask
batch0.draw(original, 0, height1); //base for the result
batch0.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_ALPHA);
batch0.draw(mask, 0, height1); //draw mask on result
batch0.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
batch0.end();
纹理的中心选择得很好,但周围不是透明色,而是黑色:
为什么结果是空白不透明?
(Full code - 警告:非常混乱)
【问题讨论】:
-
您能否详细说明您的期望是什么?您如何确定结果不透明?我认为您的目标 alpha 将为零,因此从这个意义上说它是透明的。您是否在该区域中还有其他东西现在是黑色的,并且您希望以前的内容仍然存在?
-
是的,整个应用背景是深红色和绿色的方块,并没有绘制黑色,所以如果纹理是透明的,我会选择方块,对吧?
标签: opengl libgdx textures blender alphablending