libgdx 中的颜色渐变绘图 rectangles/sprites 不一致

Unconsistent color gradient drawing rectangles/sprites in libgdx

我正在尝试使用 SpriteBatcher 绘制具有颜色渐变的精灵并手动设置顶点颜色以在没有着色器的情况下实现某种基本照明效果,但我注意到当只有一个顶点时渐变中出现奇怪的效果颜色不一样。

这取决于顶点的位置。如果不同的颜色出现在左下角或右上角没有问题,但在其他两种情况下会出现奇怪的渐变效果。

为了更好地解释这种情况,这里有一张图片。

我使用以下代码生成了顶行方块:

shapeRenderer.begin(ShapeType.Filled);
Color c1 = new Color(1,1,1,1);
Color c2 = new Color(1,0,0,1);
shapeRenderer.rect(100f, 100f, 30f, 30f, c2, c1, c1, c1);
shapeRenderer.rect(150f, 100f, 30f, 30f, c1, c2, c1, c1);
shapeRenderer.rect(200f, 100f, 30f, 30f, c1, c1, c2, c1);
shapeRenderer.rect(250f, 100f, 30f, 30f, c1, c1, c1, c2);
shapeRenderer.end();

这段代码是用 ShapeRenderer 生成的,但如果我用 SpriteBatch 生成,我会得到相同的结果。

我想这与内部绘制矩形的方式有关(基于 2 个三角形),但是,有什么方法可以在所有情况下实现相同的结果吗? (如图第3行)

诸如不同的 GL 绘制模式之类的东西...?

好的,事情是这样的,绘图取决于三角形的顺序。 如果渐变从三角形的一个顶点通过它的角平分线,那没有问题,但如果颜色渐变沿着它的边,结果就像 top-1 和 top-3 正方形。

这是因为(我认为)绘制的矩形像

1-2
| |
4-3

其实是用两个三角形画出来的像

1-2       1
 \|  and  |\
  3       4-3

因此,按照这个顺序,如果顶点 1 或 3 的颜色不同,则生成的渐变效果很奇怪。

在这种情况下我们可以做的是像这样改变要绘制的顶点的顺序(而不是它的坐标)

2-3      2-3       3
| |  =>  |/   +   /|
1-4      1       1-4

它工作得很好,正如我们在这里看到的那样: