2012-01-22 5 views
0

UPDATE2:クワッドのレンダリングだけを試みました。 FAIL!円を描く奇妙な問題

UPDATE:FULLコードはこちらです。誰かが自分のコードで問題を確認できますか? http://dl.dropbox.com/u/8489109/HelloAndroid.7z

私はOpengl ES 1.0でサークルを描こうとしています。私は、Windowsプラットフォーム上で多くのSDLとOpenGLを使用しており、ゲームで使用したポリゴンの数が少ないため、ほとんどの場合glBeginとglEndを使用していました。

貼り付けられたコードは、オブジェクトが作成されるときに呼び出されるコードです。

float ini[]=new float[360*3]; 
    ByteBuffer temp=ByteBuffer.allocateDirect(ini.length*4); 
    temp.order(ByteOrder.nativeOrder()); 
    vertex=temp.asFloatBuffer(); 
    int i; 
    float D2R=(float) (3.14159265/180); 
    for (i=0;i<360;i++){ 
     float XX=(float)(Math.sin(i*D2R)*size); 
     float YY=(float)(Math.cos(i*D2R)*size); 
     ini[i*2]=XX; 
     ini[i*2+1]=YY; 
     ini[i*2+2]=0; 
    } 
    vertex.put(ini); 
    Log.d("GAME","SPAWNED NEW OBJECT"); 
    length=ini.length; 
    //vertex=ByteBuffer.allocateDirect(temp.length*4).order(ByteOrder.nativeOrder()).asFloatBuffer(); 
    //vertex.put(temp); 
    vertex.position(0); 

は今ここにドローコード

Log.d("OBJECT","DUH WRITE"); 
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glPushMatrix(); 
gl.glTranslatef((float)x,(float)y,0); 
gl.glVertexPointer(3, GL10.GL_FLOAT,0, vertex); 
gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, length); 
gl.glPopMatrix(); 
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 

それは、円を(それが実際に実行することを決定したときに)描画であり、いくつかの奇妙な行を追加します。 例: enter image description here

これは誤りですか?

gl.glMatrixMode(gl.GL_PROJECTION); 
gl.glLoadIdentity(); 
gl.glViewport(0, 0, arg1, arg2); 
gl.glOrthof(0,(float)arg1,(float)arg2,0,-1,1); 
gl.glMatrixMode(gl.GL_MODELVIEW); 
gl.glLoadIdentity(); 

答えて

1

これは意味をなさない:

float ini[]=new float[360*3]; 
/* ... */ 
for (i=0;i<360;i++){ 
    float XX=(float)(Math.sin(i*D2R)*size); 
    float YY=(float)(Math.cos(i*D2R)*size); 
    ini[i*2]=XX; 
    ini[i*2+1]=YY; 
    ini[i*2+2]=0; 
} 

あなたは3つの要素の複数を割り当てるが、2のストライドに掛けるどちらか

float ini[]=new float[360*2]; 
/* ... */ 
for (i=0;i<360;i++){ 
    float XX=(float)(Math.sin(i*D2R)*size); 
    float YY=(float)(Math.cos(i*D2R)*size); 
    ini[i*2]=XX; 
    ini[i*2+1]=YY; 
} 
/* ... */ 
gl.glVertexPointer(2, GL10.GL_FLOAT,0, vertex); 

または

を行います
float ini[]=new float[360*3]; 
/* ... */ 
for (i=0;i<360;i++){ 
    float XX=(float)(Math.sin(i*D2R)*size); 
    float YY=(float)(Math.cos(i*D2R)*size); 
    ini[i*3]=XX; 
    ini[i*3+1]=YY; 
    ini[i*3+2]=0; 
/*  ^  */ 
/*  ^  */ 
} 
/* ... */ 
gl.glVertexPointer(3, GL10.GL_FLOAT,0, vertex); 

また、glDrawArraysを使用しています。ロング。配列の長さはバイト単位ではなく、描画する頂点の数(ケースでは360)を使用します。

gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 360); 
+0

ええ、私はすべての行を読み始めてから10分後に見つけました。 glDrawArrays、glVertexPointerを使用しているのは初めてのことです。ご協力いただきありがとうございます!それは今働いている! – Xiofurry