OpenGL ES - android - 有两个三角形的正方形 - 线性渐变?

时间:2012-06-08 11:01:04

标签: android opengl-es alphablending

我有一个由两个三角形组成的正方形。 左上角应为红色,右下角应为蓝色。现在我想要一个从左上角到右下角的线性渐变。

我不希望在右上角和左下角有颜色。我试图给alpha 0,但这不起作用。我看到了黑色。

        float vertices[] = 
    {
        -1.0f, -1.0f,
         1.0f, -1.0f,
        -1.0f,  1.0f,
         1.0f,  1.0f
    }; 

    byte maxColor=(byte)255;

    byte colors[] = 
    {
        maxColor,       0,       0, maxColor,
        0,              0,       0,        0,
        0,              0,maxColor, maxColor,
        0,              0,       0,        0
    }; 

    byte indices[] = 
    {
        0, 3, 1,
        0, 2, 3
    };

有没有人知道该怎么做?

编辑:

我现在以不同的方式解决了它。我从上到下用渐变填充方块。然后我将方块旋转45度并将其放大一点。

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

好吧,如果你想在四边形上获得线性渐变,其他两条边从插值中自动获得颜色,那么不要乱用alpha,它(通常)只用于透明效果。

不幸的是,您不能仅为某些顶点指定颜色并为其他顶点指定自动插值。光栅化器不仅使用来自其他基元的信息神奇地使用线性渐变。它只是在基元上插入基元(单个三角形)顶点的颜色。所以你需要给你的其他顶点一些颜色。

但在你的情况下,这很容易。您的顶点实际上都是“渐变”的中间位置,因此您可以自己进行插值并给它们正确的颜色,在您的情况下(128, 0, 128)(+ -1,但是谁在乎):

byte colors[] = 
{
    255,   0,   0, 255, 
    128,   0,   0, 255, 
      0,   0, 255, 255, 
    128,   0, 128, 255
};

光栅化器独立地插入各个三角形的事实可能会引入一些偏离纯渐变的插值伪像(但在您的情况下可能不会)。在这种情况下,如果四边形的对角线(两个三角形之间的边界)沿着渐变或通过渐变,它可能会有所不同。