私が実際に達成しようとしていること: グラデーションの垂直色でテキストを描画したいのですが。私はこの解決策を見つけましたが、私の場合、グラデーションフォントの周りに黒い四角が付いているので、私にはあまり適していません。それを取り除く方法がわからないので、簡単な(無関係な部分)質問を始めましたopenglとlibgdxのブレンディングとフレームバッファーの物理をよりよく理解する
私が理解しようとしていたことは、目標とは関係ありません。 白い正方形のテクスチャがあり、赤い背景の上に描画しています。緑の四角形を白いものの上に描画しようとしています。緑の四角形は部分的に白いものを覆い、部分的に赤い背景の上に配置しています(下の画像を参照)。
私の意図は次のとおりです。緑の正方形の後ろにある白い領域は緑にペイントする必要がありますが、すべての赤の背景は影響を受けず、変更されないままです(そのままの赤)。
これどうやってするの?
package com.mygdx.game;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
public class Game extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
private int height;
private int width;
private ShapeRenderer shapeRenderer;
@Override
public void create() {
batch = new SpriteBatch();
img = new Texture("white.png");
width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();
shapeRenderer = new ShapeRenderer();
shapeRenderer.setAutoShapeType(true);
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(img, width / 7, height / 4);
batch.end();
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_ONE, GL20.GL_SRC_COLOR);
shapeRenderer.begin();
shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.GREEN);
shapeRenderer.rect(width / 2 - 100, height / 4 - 50, 200, 200);
shapeRenderer.end();
Gdx.gl.glDisable(GL20.GL_BLEND);
}
@Override
public void dispose() {
batch.dispose();
img.dispose();
}
}
理想的には、緑の四角は透明にならず、白い領域を隠す場所で白をブロックするだけです。
更新:私は@Xoppaの答えを正しいものとしてマークします。これにより、元の質問が解決され、次の結果が得られます。