1

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

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

感谢您的回答。

4

1 回答 1

0

好吧,如果您想在四边形上获得线性渐变,而另外两个边缘会自动从插值中获取颜色,那么不要弄乱 alpha,它(通常)仅用于透明效果。

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

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

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

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

于 2012-06-08T11:21:53.010 回答