Смещения для данных вершин, перемежающихся в 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);