我试图了解android中的opengl,这是我的渲染和一个立方体类..问题是在设备上多维数据集没有显示。谁能告诉我为什么?谁能纠正我的错误?感谢所有人,对不起我的英语
渲染:
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 :(得分:0)
您将错误的缓冲区作为最后一个参数传递给glDrawElements
。您在其中指定的缓冲区应包含索引信息而不是顶点位置。您应该使用glDrawArrays
,因为您没有使用索引绘图。
与问题无关,但您也应该在绘制调用后禁用GL_COLOR_ARRAY
。