Java libgdx中颜色渐变绘制矩形/精灵不一致

Java libgdx中颜色渐变绘制矩形/精灵不一致,java,opengl,libgdx,Java,Opengl,Libgdx,我正在尝试使用SpriteBatcher绘制带有颜色渐变的精灵,并手动设置顶点颜色,以在没有着色器的情况下实现某种基本照明效果,但我注意到渐变中有一种奇怪的效果,即只有一种顶点颜色不同 它取决于顶点的位置。如果不同的颜色位于左下角或右上角,则没有问题,但在其他两种情况下,会出现奇怪的渐变效果 为了更好地解释这种情况,这里有一张图片 我用以下代码生成了最上面一行的正方形: shapeRenderer.begin(ShapeType.Filled); Color c1 = new Color(1,

我正在尝试使用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();
这段代码是使用ShaperEnder生成的,但是如果使用SpriteBatch,我会得到相同的结果

我想这与内部绘制矩形的方式有关(基于2个三角形),但是,有没有任何方法可以在所有情况下获得相同的结果?(作为图像的第三行)


类似于不同的GL绘图模式之类的东西

好的,问题是,绘图取决于三角形的顺序。 如果渐变从三角形的一个顶点穿过其角平分线,则没有问题,但如果颜色渐变沿着其边,则结果类似于顶部1和顶部3的正方形

这是由于(我想)一个画成这样的矩形的事实

1-2
| |
4-3
实际上是用两个三角形绘制的,就像

1-2       1
 \|  and  |\
  3       4-3
所以,按照这个顺序,如果不同的颜色在顶点1或3,那么产生的渐变是奇怪的

在这种情况下,我们能做的是改变顶点的顺序(不是它的坐标)这样画

2-3      2-3       3
| |  =>  |/   +   /|
1-4      1       1-4
正如我们在这里看到的那样,它工作得很好:


使用专门的着色器,您可能会得到类似于第三幅图像的效果,但我能想到的唯一方法是从拐角处生成径向渐变,而不是像您绘制的那样的线性渐变。如果精灵是你想要着色的左上角或右下角,简单地旋转90度怎么样?我已经考虑过旋转,但我不认为这是可能的,因为它不是图像,而是顶点的颜色。。。因此,“旋转”顶点的颜色只会改变颜色的值,而不会改变它们的绘制方式。(即,将顶部2图像旋转90ºCW不会产生底部2,而是顶部3)我不是说旋转颜色。我的意思是旋转整个精灵90度,并选择适当的角落。例如,如果您想要底部1的图像,则逆时针旋转精灵90度,并设置右上角顶点的颜色。我明白了。。。可能吗?无论如何,我认为我做不到,因为我没有使用精灵,而是使用纹理区域和顶点来绘制它们。。。所以这就是为什么我想到了它们的顶点位置…哦,最后我在代码中尝试了一下,它成功了!如果你想把它作为一个答案,我会接受的,但如果你不介意,我想有一个更详细的解释给其他人理解。基本上,我所做的是,如果我按照下一个顺序绘制顶点:V1 V2 V3 V4,但是具有不同颜色的顶点是V1,那么我按照下一个顺序绘制它们:V4 V1 V3,并将不同的颜色指定给V4