4

两者都不

sb.setBlendFunction(GL10.GL_ONE_MINUS_DST_COLOR, GL10.GL_ZERO);
sb.begin();
font.setColor(1, 1, 1, 1);
for (LineRect s: vertices){
     font.draw(sb,""+ s.x+","+.y, s.x, s.y);
}
sb.end();
sb.setBlendFunction(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

也不

Gdx.gl10.glEnable(GL10.GL_COLOR_LOGIC_OP);
Gdx.gl10.glLogicOp(GL10.GL_XOR);

    sb.begin();
    font.setColor(1, 1, 1, 1);
    for (LineRect s: vertices){
         font.draw(sb,""+ s.x+","+.y, s.x, s.y);
    }
    sb.end();


Gdx.gl10.glDisable(GL10.GL_COLOR_LOGIC_OP);

为我工作,我做错了什么?我如何解决它?

这个想法是绘制字体,它由具有部分透明纹理的四边形组成,以某种方式它总是可见的,除非背景是 50% 的灰色。背景黑色 = 字体呈现白色,依此类推。

4

1 回答 1

1

您需要测试背景颜色的亮度。这是我为 AWT 颜色制作的一种方法,应该很容易适应 libgdx Color 类:

/**
 * Returns the brightness of the color, between 0 and 255.
 */
public static int getBrightness(Color c) {
    if (c == null) return -1;
    return (int) Math.sqrt(
        c.getRed() * c.getRed() * .241 +
        c.getGreen() * c.getGreen() * .691 +
        c.getBlue() * c.getBlue() * .068);
}

如果亮度 < 128,则使用浅色前景,否则使用深色前景。

于 2012-02-28T15:55:29.727 回答