Những gì tôi thực sự cố gắng để đạt được: Tôi muốn vẽ văn bản với màu dọc gradient. Tôi đã tìm thấy giải pháp này , nhưng nó không phù hợp với tôi, vì nó có hình vuông màu đen xung quanh phông chữ gradient trong trường hợp của tôi - không biết làm cách nào để loại bỏ nó, vì vậy tôi bắt đầu câu hỏi đơn giản (phần không liên quan) hiểu rõ hơn về vật lý của pha trộn và bộ đệm khung trong opengl và libgdx
Những gì tôi đã cố gắng để hiểu, không liên quan đến mục tiêu của tôi: Tôi có một kết cấu với một hình vuông màu trắng trên đó, tôi vẽ nó trên nền đỏ. Tôi đang cố gắng vẽ một hình vuông màu xanh lá cây lên trên cái màu trắng, hình vuông màu xanh lá cây che một phần cái màu trắng và một phần trên nền màu đỏ (xem hình bên dưới).
Ý định của tôi là: khu vực màu trắng, phía sau hình vuông màu xanh lá cây nên được sơn màu xanh lá cây, nhưng tất cả nền đỏ không nên bị ảnh hưởng và không thay đổi (màu đỏ như nó).
Tôi có thể làm cái này như thế nào?
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();
}
}
Lý tưởng nhất, hình vuông màu xanh lá cây không nên trong suốt dù thế nào, chỉ nên chặn màu trắng nơi nó che giấu khu vực màu trắng.
Cập nhật : Tôi đánh dấu câu trả lời của @Xoppa là chính xác, vì nó giải quyết câu hỏi ban đầu của tôi với kết quả sau: