5

現在、次のコードを使用して図形を描画しています。

GLfloat vertex = // vertex points

glLineWidth(2);

glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(1.0, 0.0, 0.0, 1.0);
glVertexPointer(2, GL_FLOAT, 0, vertex);
glDrawArrays(GL_LINE_STRIP, 0, vertex_size);
glDisableClientState(GL_VERTEX_ARRAY);

私が描いた形は自然に閉じます。この形を (放射状の) グラデーションで塗りつぶすことはできますか? もしそうなら、どうやってこれを行うのですか?

4

1 に答える 1

14

ES 1.xを使用している場合、色は面全体で線形補間されるため、ピクセルごとの放射状グラデーションを計算することはできません。したがって、放射状グラデーションテクスチャをアップロードするか、適切なジオメトリを作成して放射状に近いグラデーションを作成できます。

ES 2.xでは、ピクセルごとに何が起こるかを自分で定義しているため、このような制限はありません。非常にナイーブな放射状グラデーションフラグメントシェーダーは、次のようになります(即座にコーディングされ、文法が完全にチェックされません)。

varying mediump vec3 myPosition;
uniform mediump vec3 referencePosition;
uniform lowp vec4 centreColour, outerColour;

[...]

mediump float distanceFromReferencePoint =
                       clamp(distance(myPosition, referencePosition), 0.0, 1.0);

gl_FragColor = mix(centreColour, outerColour, distanceFromReferencePoint);
于 2011-07-14T18:55:23.103 に答える