Начало работы с OpenGL ES 1.x на Android - базовые примитивы - PullRequest
1 голос
/ 09 декабря 2011

Я был на Android некоторое время, после использования библиотек Android, основанных на OpenGL ES, я решил сделать решающий шаг и изучить его сам. Это кажется довольно крутой кривой обучения, но я предан и всегда готов учиться. Однако, прочитав все учебники для начинающих, которые я смог найти, я стараюсь связать воедино свое первое приложение. Я просто пытаюсь отобразить треугольник на экране, но пока все, что у меня получается, это черный экран.

Если кто-то сможет указать, где я ошибаюсь (и, если возможно, объяснить, почему), я был бы очень благодарен! Спасибо! (Ниже рендерер, я тоже не видел смысла в том, чтобы включать Activity).

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 Ответ

1 голос
/ 09 декабря 2011

Это большой код для отображения треугольника, вероятно, откуда-то скопированного. Вы должны попытаться удалить строку за строкой в ​​методе 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. Они мне очень помогли

...