1

2 つの三角形で作られた正方形があります。左上は赤、右下は青です。今、左上から右下への線形グラデーションが必要です。

右上と左下に色を付けたくありません。アルファ 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

ええと、クワッド上で線形グラデーションを取得したい場合、他の2つのエッジは補間から自動的に色を取得し、アルファを台無しにしないでください。これは(通常)透明効果にのみ使用されます。

残念ながら、一部の頂点の色を指定して、他の頂点の自動補間を取得することはできません。ラスタライザーは、他のプリミティブからの情報を使用して、線形グラデーションを魔法のように使用するだけではありません。プリミティブ全体のプリミティブ(単一の三角形)の頂点の色を補間するだけです。したがって、他の頂点に色を付ける必要があります。

しかし、あなたの場合、それはかなり簡単です。あなたの頂点は実際には両方とも「グラデーション」の途中にあるので、あなたは自分で補間を行い、あなたの場合(128, 0, 128)(+-1、しかし誰が気にするか)、それらに正しい色を与えることができます:

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

ラスタライザーが個々の三角形を個別に補間するという事実は、純粋な勾配から逸脱するいくつかの補間アーティファクトを導入する可能性があります(ただし、あなたの場合はおそらくそうではありません)。この場合、クワッドの対角線(2つの三角形の境界)がグラデーションに沿っているか、グラデーションを通過している場合に違いが生じる可能性があります。

于 2012-06-08T11:21:53.010 に答える