Intereting Posts
Как можно обрабатывать несколько запросов для заполнения моделей с помощью RXJava Observables? Как использовать распознавание активности для обнаружения хождения / бега против on_foot Выберите все флажок в списке андроидов Методы, скопированные из руководства пользователя Facebook, отображают ошибку «неприменимо» Есть ли API для отправки звонков на голосовую почту в Android? Android AlarmManager не запускается после обновления Google Play Есть ли эквивалент #IF и #CONST .NET в Java / Android? Могу ли я загружать изображения и текст, используя UrlEncodedFormEntity для нескольких частей? Экран входа в систему, показывающий progressdialog и разрешение изменения ориентации экрана Как определить сделанный вызов является локальным или STD ИЛИ ISD Как я могу перезапустить службу в андроиде программно? Как удалить строку таблицы в макете таблицы в android Защита от свободы Предотвращение андроида обратной связи с оборудованием для React Native Добавление элементов управления яркостью экрана в приложение для Android

Смещения для данных вершин, перемежающихся в OpenGL ES на Android

Можно ли использовать данные на вершину, перемеженные в OpenGL ES на Android?

Я не могу получить правильные указатели смещения для normal и color элементов.

В C ++ я бы сделал что-то вроде этого:

 struct ColoredVertexData3D{ Vertex3D vertex; Vector3D normal; ColorRGBA color; }; const ColoredVertexData3D vertexData[] = { { {0.0f, 0.5f, 0.8f}, // Vertex | {0.0f, 0.4f, 0.6f}, // Normal | Vertex 0 {1.0f, 0.0f, 0.0f, 1.0f} // Color | }, { {0.8f, 0.0f, 0.5f}, // Vertex | {0.6f, 0.0f, 0.4f}, // Normal | Vertex 1 {1.0f, 0.5f, 0.0f, 1.0f} // Color | }, // ... more vertexes. }; const int stride = sizeof(ColoredVertexData3D); glVertexPointer(3, GL_FLOAT, stride, &vertexData[0].vertex); glColorPointer(4, GL_FLOAT, stride, &vertexData[0].color); glNormalPointer(GL_FLOAT, stride, &vertexData[0].normal); 

Возможно ли это на Android в Java? Это то, что я получил в настоящее время:

 ByteBuffer vertexData = ...; int stride = 40; gl.glVertexPointer(3, GL10.GL_FLOAT, stride, vertexData); // This obviously doesn't work. ------------v gl.glColorPointer(4, GL10.GL_FLOAT, stride, &vertexData[0].color); gl.glNormalPointer(GL10.GL_FLOAT, stride, &vertexData[0].normal); 

Основная идея состоит в том, чтобы вызвать duplicate () в ByteBuffer, который создает новый ByteBuffer, который разделяет базовое хранилище, но позволяет вам начать работу в другой позиции.

Вот что сработало для меня:

 FloatBuffer verticesNormals; // ... code to initialize verticesNormals ... // verticesNormals contains 6 floats for each vertex. The first three // define the position and the next three define the normal. gl.glVertexPointer(3, gl.GL_FLOAT, 24, verticesNormals); // Create a buffer that points 3 floats past the beginning. FloatBuffer normalData = mVerticesNormals.duplicate(); normalData.position(3); gl.glNormalPointer(gl.GL_FLOAT, 24, normalData);