6

申し訳ありませんが、明確にするために質問を書き直します。

私の .cpp コードでは、クワッドのリストを作成します。そのうちのいくつかにはフラグがあり、ピクセル シェーダーでは、このフラグが設定されているかどうかを確認します。フラグが設定されていない場合、クワッドは赤で色付けされます。たとえば、フラグが設定されている場合、すべてのピクセルの色を決定したいので、フラグが設定されたクワッドの半分を赤で、残りの半分を青で色付けする必要がある場合は、次のように簡単に実行できます。

if coordinate in quad < something color = red
else colour = blue; 

このようにして、四角形の半分を青、残りの半分を赤にするか、どこに赤を配置するか、どこに青を配置するかを決めることができます。

50x50 ピクセルのクワッドがあるとします。

[フラグ]

if(quad.flag == 1)
  {    
    if(Pixel_coordinate.x<25 ) gl_fragColor = vec4(1.0, 0.0, 0.0, 1.0);
    else gl_fragColor = vec4(0.0, 1.0, 0.0, 1.0);
  }
else
  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);

この場合、フラグが設定されたクワッドは、面ごとに 2 つの色を取得すると予想されます。より具体的になったことを願っています。

ありがとう。

何かを追加するだけで、テクスチャを使用できません。

わかりました私は今これを行います:

すべてのクワッドには、(0,0)、(0,1)、(1,1)、(1,0) に調整された 4 つのテクスチャがあります。

次を使用してテクスチャ座標を有効にします。

glTexCoordPointer(2, GL_SHORT, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 7));

[垂直]

varying vec2 texCoord;

main()
{
    texCoord = gl_MultiTexCoord0.xy;
} 

[フラグ]

varying vec2 texCoord;

main()
{
    float x1 = texCoord.s;
    float x2 = texCoord.t;

    gl_FragColor = vec4(x1, x2, 0.0, 1.0);
}

私は常に黄色を取得するため、ほとんどの場合 x1 =1 および x2 = 1 で、一部のクワッドは黄色/緑色です。

テクスチャ座標がフラグメント シェーダーで変更されると予想されるので、グラデーションを取得する必要がありますが、間違っていますか?

4

2 に答える 2

4

クワッド内の座標を知りたい場合は、自分で計算する必要があります。そのためには、新しいインターポラントを作成し ( のように呼び出しますvec2 quadCoord)、頂点ごとに適切に設定する必要があります。つまり、それを属性として追加し、頂点シェーダーを介して渡す必要がある可能性があります。 . 例えば:

// in the vertex shader
attribute vec2 quadCoordIn;
varying vec2 quadCoord;

main() {
    quadCoord = quadCoordIn;
              :

四角形を描画するときに、描画コードでこの属性をフィードする必要があります。四角形ごとに、頂点は (0,0)、(0,1)、(1,1)、(1,0) の値を持つ可能性がありquadCoordInます。必要に応じて他の座標系を使用することもできますが、これはが最も簡単です。

次に、フラグメント プログラムでアクセスquadCoord.xyして、クワッド内のどこにいるかを判断できます。

于 2012-08-24T17:58:58.343 に答える