Почему мой Android OpenGL ES тест рендерер сбой - PullRequest
1 голос
/ 09 октября 2010

Еще раз я пытаюсь войти в openGL, но, как обычно, я задыхаюсь, когда передвигаюсь по вершинам / вертиксам / что угодно, и каждая маленькая деталь может привести к катастрофе (неправильный формат, неправильно настроенная инициализация, где сохранена памятьи т. д.).

Моя главная цель - использовать openGL для 2D-графики, чтобы повысить производительность по сравнению с обычными процессорами рисования.

В любом случае мой рендерер openGL выглядит так:*

В настоящий момент происходит сбой на линии:

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

С исключением IndexOutOfBoundsException, но я уверен, что с кодом есть другие проблемы.

Благодарен за любую помощь!

Ответы [ 3 ]

1 голос
/ 11 декабря 2010

Вы, наверное, уже решили это, но я подумал, что я вставил ответ для кого-то еще.Когда вы назвали эту строку:

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

Вы говорите, что в буфере вершин есть 3 треугольника.Но на самом деле есть 1 треугольник.Вы должны заменить 3 на:

vertices.length / 3

Таким образом, если вы добавите еще несколько точек для большего количества полигонов, он будет отображаться правильно.Надеюсь, это поможет.

-Brian

PS: В настоящее время я изучаю, как использовать OpenGL с Android.Так что я разобрался со всеми этими маленькими проблемами.Удачи:)

0 голосов
/ 06 июня 2011

это может быть не ответ, а совет ... не помещайте этот код в OnDrawFrame, так как ваши координаты треугольника не меняются ... делайте это в onSurfaceCreated. сделать FloatBuffer переменной-членом класса

 // Define the points of my triangle
    float floatbuff[] = {
            1.0f,0.0f,0.0f,
            0.0f,1.0f,0.0f,
            -1.0f,0.0f,0.0f
            };
    // Create memory on the heap
    ByteBuffer vbb = ByteBuffer.allocateDirect(3 * 3 * 4);
    vbb.order(ByteOrder.nativeOrder());
    FloatBuffer vertices = vbb.asFloatBuffer();

    // Insert points into floatbuffer
    vertices.put(floatbuff);

взгляните на этот класс TriangleRenderer.java это даст вам базовый

0 голосов
/ 10 октября 2010

Попробуйте изменить это:

// Create memory on the heap
ByteBuffer vbb = ByteBuffer.allocateDirect(3 * 3 * 4);
vbb.order(ByteOrder.nativeOrder());
FloatBuffer vertices = vbb.asFloatBuffer();

// Insert points into floatbuffer
vertices.put(floatbuff);
// Reset position
vertices.position(0);

к этому:

FloatBuffer vertices = FloatBuffer.wrap(floatbuff);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...