Как отобразить растровый шрифт Libgdx так, чтобы цвет его пикселей был обратным фону? - PullRequest
4 голосов
/ 28 декабря 2011

Ни

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% серым. Фон черный = шрифт отображается белым и т. Д.

1 Ответ

1 голос
/ 28 февраля 2012

Вам нужно проверить яркость цвета фона. вот метод, который я сделал для цветов 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, используйте светлый передний план, в противном случае используйте темный передний план. </p>

...