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



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

我不想要右上角和左下角的颜色。我试图给出 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度,然后放大一点。

感谢您的回答。

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

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

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

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

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

最新更新