为什么glColorPointer不会为三角形着色 - 以及其他奇怪的东西与opengl es

时间:2011-04-12 21:46:27

标签: android opengl-es vbo

我对opengl并不熟悉,但我试图在屏幕上绘制一个简单的三角形。每个角落都以不同的颜色着色。有些想法就像一个基础教程......问题是,1。三角形只是白色。 2.三角形仅在仿真器中可见,而不在我的HTC Desire上。

我的GLView课程:

public class GLView extends GLSurfaceView implements GLSurfaceView.Renderer {

private FloatBuffer vertexBuff;
private FloatBuffer colorBuff;

public static FloatBuffer makeFloatBuffer(float[] arr)
{
    ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4);
    bb.order(ByteOrder.nativeOrder());
    FloatBuffer fb = bb.asFloatBuffer();
    fb.put(arr);
    fb.position(0);
    return fb;
}

public GLView(Context context) {
    super(context);
    setRenderer(this);
}

@Override
public void onDrawFrame(GL10 gl) {
    gl.glClearColor(0, 0, 0, 0);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);


    gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
    gl.glColorPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { 1, 0, 0,
                                                                         0, 1, 0,
                                                                         0, 0, 1 }));

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);       
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { 0, 0, 0,
                                                                          0, 1, 0,
                                                                          1, 1, 0}));

    gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);     
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {

}
}

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我猜测OpenGL状态可能有些未指定,因为您不提供投影或模型视图矩阵。但我估计主要是因为我不熟悉OpenGL。无论如何,我通过向颜色数组

添加alpha值来使代码工作
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, makeFloatBuffer(new float[] { 1, 0, 0, 1,
                                                                         0, 1, 0, 1,
                                                                         0, 0, 1, 1 }));

提供所提到的转换矩阵可能会在设备上发挥作用。

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);

        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluOrtho2D(gl, -1.0f, 1.0f, -1.0f, 1.0f);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }