2016-12-11 20 views
0

私はアンドロイドでopenglを理解しようとしています。これは私のレンダーとキューブクラスです。問題はデバイス上でキューブが表示されていないことです。誰も私の理由を伝えることができますか?誰でも私の間違いを訂正できますか?すべてと私の英語OpenGlESは何も描画しません

のため申し訳ありませんおかげでレンダリング:

public class Prova implements GLSurfaceView.Renderer { 

int wi,he; 
public Prova(int wid,int hei){ 
    this.wi=wid; 
    this.he=hei; 
} 
@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glViewport(0,0,wi,he); 
    gl.glClearColor(255,255,255,0); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 

    Cube cube= new Cube(gl); 
    cube.draw(gl); 

} 

@Override 
public void onSurfaceChanged(GL10 gl, int width, int height) { 

} 

@Override 
public void onDrawFrame(GL10 gl) { 

} 
} 

キューブ:

public class Cube 
{ 

private ByteBuffer byteBuffer; 
private FloatBuffer floatBuffer; 
private FloatBuffer colorBuffer; 

float[] buffer={ 
     0.5f,0.5f,0f, 
     -0.5f,0.5f,0f, 
     0.5f,-0.5f,0f, 
     -0.5f,-0.5f,0f, 

     0.5f,0.5f,-1f, 
     -0.5f,0.5f,-1f, 
     0.5f,-0.5f,-1f, 
     -0.5f,-0.5f,-1f 

}; 

float[] color={ 
     1f,0f,0f,0f, 
     1f,0f,0f,0f, 
     1f,0f,0f,0f, 
     1f,0f,0f,0f, 

     1f,0f,0f,0f, 
     1f,0f,0f,0f, 
     1f,0f,0f,0f, 
     1f,0f,0f,0f, 
}; 


public Cube(GL10 gl10) 
{ 



    byteBuffer=ByteBuffer.allocateDirect(4*buffer.length); 
    byteBuffer.order(ByteOrder.nativeOrder()); 
    floatBuffer= byteBuffer.asFloatBuffer(); 
    floatBuffer.put(buffer); 
    floatBuffer.position(0); 

    byteBuffer=ByteBuffer.allocateDirect(4*color.length); 
    byteBuffer.order(ByteOrder.nativeOrder()); 
    colorBuffer= byteBuffer.asFloatBuffer(); 
    colorBuffer.put(color); 
    colorBuffer.position(0); 

} 

public void draw(GL10 gl10) 
{ 
    gl10.glVertexPointer(3, GL10.GL_FLOAT,0,floatBuffer); 
    gl10.glColorPointer(4,GL10.GL_FLOAT,0,colorBuffer); 


    gl10.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl10.glEnableClientState(GL10.GL_COLOR_ARRAY); 


    gl10.glDrawElements(GL10.GL_TRIANGLE_STRIP,36, GL10.GL_UNSIGNED_BYTE,floatBuffer); 

    gl10.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
} 

}

+0

あなたの 'onDrawFrame'メソッドはemtpyですか? – BDL

+0

はい、ただし描画時に頂点を描画せず、サーフェスを作成した場合 –

答えて

0

をあなたはglDrawElementsへの最後のパラメータとして間違ったバッファを渡しています。そこに指定するバッファには、頂点の位置ではなくインデックス情報が含まれている必要があります。インデックス付きの図面を使用していないので、代わりにglDrawArraysを使用してください。

問題には関係しませんが、描画呼び出し後にGL_COLOR_ARRAYも無効にする必要があります。

関連する問題