在Android上开始使用OpenGL ES 1.x - 基本原语

时间:2011-12-09 16:36:07

标签: android opengl-es primitive

我已经在Android上工作了一段时间,在使用基于OpenGL ES的Android库之后,我决定冒险尝试并自己学习。这似乎是一个非常陡峭的学习曲线,但我承诺并且总是愿意学习。然而,在阅读了我能找到的任何初学者教程之后,我正在努力将我的第一个应用程序串起来。我只是想在屏幕上显示一个三角形,但到目前为止,我最终得到的只是一个黑屏。

如果有人能够指出我哪里出错了(如果可能的话解释原因),我真的很感激!谢谢! (下面是渲染器,我认为包含活动也没有意义。)

public class OpenGLRenderer implements Renderer {

private OpenGLActivity mContext;

public OpenGLRenderer(OpenGLActivity pContext) {
    mContext = pContext;
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

    gl.glClearColor(0.0f, 0.0f, 0.0f, 1f);
    gl.glShadeModel(GL10.GL_FLAT);

    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glDisable(GL10.GL_DITHER);
    gl.glDisable(GL10.GL_LIGHTING);
    gl.glDisable(GL10.GL_MULTISAMPLE);

    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glEnable(GL10.GL_BLEND);
    gl.glEnable(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glEnable(GL10.GL_VERTEX_ARRAY);
    gl.glEnable(GL10.GL_CULL_FACE);

    gl.glFrontFace(GL10.GL_CCW);
    gl.glCullFace(GL10.GL_BACK);     

    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

    gl.glViewport(0, 0, 480,  800);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrthof(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
}

@Override
public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    gl.glLoadIdentity();

    gl.glDisable(GL10.GL_TEXTURE_2D);
    gl.glColor4f(0f, 1f, 0f, 1f);

    float[] vertices = new float[ ]{1,0, 0,1, -1,0};
    FloatBuffer buffer = ByteBuffer.allocateDirect(24).order(ByteOrder.nativeOrder()).asFloatBuffer();

    buffer.put(vertices);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, buffer);

    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 3);

    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

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

1 个答案:

答案 0 :(得分:1)

这是很多只显示三角形的代码,可能是从某个地方复制过来的。您应该尝试在onSurfaceCreated方法中逐行删除并查看是否有更改。您还应该在此处发布您的活动。

以下是渲染三角形的示例

http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/

http://code.google.com/p/android-gamedev/source/browse/trunk/src/com/badlogic/gamedev/samples/TriangleSample.java

既然您正在学习OpenGL,那么您应该看看Jayway教程。他们给了我很多帮助