OpenGLを使った三角や丸などのプリミティブ作成用のメソッドのあるクラスを作り描画を行いました。
glColor4fを使って、
gl.glColor4f(0.25f,0.25f,0.75f,1.0f);のように色を指定をしても
どうしても色が白になってしまいます。
glColor4fを無効にする設定とか有るのでしょうか?
宜しくお願いします。
作ったのはこんな感じのメソッドです。
/**
* 円を描画
*/
public static void drawCircle(GL10 gl,final float x, final float y,
final int divides, final float radius,
final int red, final int green, final int blue, final int alpha) {
float [] vertices = new float[divides * 3 * 2];//頂点の数はn角形の場合はn*3*2になる。
int vertexId = 0;
for(int i=0; i < divides; i++){
float theta1 = getRadian(divides, i);
float theta2 = getRadian(divides, i+1);
vertices[vertexId++] = x;
vertices[vertexId++] = y;
vertices[vertexId++] = (float) (cos(theta1) * radius + x);
vertices[vertexId++] = (float) (sin(theta1) * radius + y);
vertices[vertexId++] = (float) (cos(theta2) * radius + x);
vertices[vertexId++] = (float) (sin(theta2) * radius + y);
}
//色指定
gl.glColor4f(0.25f,0.25f,0.75f,1.0f);
// gl.glColor4x(red, green, blue, alpha);
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
//ポリゴン描画
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, getFloatBuffer(vertices) );
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//3つの頂点を持つポリゴンn個で構成されている。
final int polygonNum = divides * 3;
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, polygonNum);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
> glColor4fを使って、
> gl.glColor4f(0.25f,0.25f,0.75f,1.0f);のように色を指定をしても
> どうしても色が白になってしまいます。
>
glColor4xを使うと期待した色になって、glColor4fを使うと真っ白という意味で
すか?
使用したGPUが(浮動小数点に対応してない)ESのCommon Liteのみのサポートだっ
たりしませんか?
On 2011/04/11, at 13:57, tueda <tu...@wolf.dog.cx> wrote:
まず問題の切り分けが先決ですね。
glColor4xだと期待する通りに動いてglColor4fだと真っ白と推測したのは、
正しいのでしょうか、それとも間違っているのでしょうか?
これを確定せずにあれこれ推測するのは時間の無駄です。
もしこの推測が正しいのであればCommon Liteプロファイルを使っている可能性
が高いです。
その場合はglGetString(GL_VERSION)で確認できます。
String str = gl.glGetString(GL11.GL_VERSION);
Log.println(Log.INFO, "OpenGL", str);
手元ではログに
OpenGL ES-CM 1.1
が表示されました。手元では今Commonプロファイルを使っています。
Common Liteプロファイルを使っている場合 ES-CL が表示されるはずです。
で、もしCommon Liteプロファイルを使っているなら、あとはハードの制限なの
かSDKあたりの問題なのかを調べます。
多分ぐぐればベンダー提供のドキュメントが出てくるでしょう。
調べた結果Commonプロファイルが使えるのであればそうすべきだし、
無理ならあきらめてCommon LiteプロファイルでglColor4xを使うことになると思
います。
すみません、このご質問返信してませんでした。
4x, 4fのどちらを使用しても白になります。
ちなみにglColorPointerを使用したサンプルは色が付きます。
ということなら、先ほどまでのメールは全く関係ないですね(だから最初に確認
した)。
正直ソースを見ないとよくわかりませんが、通常余計なことをしなければ
glColorで色が変わります。
なぜ色が変わらないかというと、恐らく余計な事をしているからです。
想像ですが頂点カラーを使ったサンプルをコピって来て使ってますよね?
頂点カラーを使うときの3点セット、
glEnableClientState (GL_COLOR_ARRAY);
glDisableClientState (GL_COLOR_ARRAY);
glColorPointer ();
のどれかをコメントアウトせずに呼んでしまっていませんか?
多分glEnableClientState (GL_COLOR_ARRAY)が怪しいです。
全部コメントアウトして頂点カラーを使わない設定にすればglColorで色が変わ
ると思います。
On 2011/04/11, at 13:57, tueda <tu...@wolf.dog.cx> wrote: