Compensaciones para datos por vértice intercalados en OpenGL ES en Android

¿Es posible usar datos por vértice entrelazados en OpenGL ES en Android?

No puedo obtener los punteros de desplazamiento correctos para los miembros normal y de color .

En C ++ haría algo como esto:

 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); 

¿Es lo mismo posible en Android en Java? Esto es lo que tengo actualmente:

 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); 

La idea básica es llamar a duplicate () en el ByteBuffer, que crea un nuevo ByteBuffer que comparte el almacenamiento subyacente pero le permite comenzar en una posición diferente.

Esto es lo que funcionó para mí:

 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); 
  • AndroidAnnotations y Dagger
  • Cómo cargar baldosas de un mapa de bits grande en Android?
  • Ejecución de pruebas de Junit de Android desde la línea de comandos
  • ListActivity TwoLineListItem Alternativa
  • Java / Eclipse - No más archivo R nunca
  • ¿En MVP está onClick la responsabilidad de View o Presenter?
  • ¿Qué es una NullPointerException y cómo puedo solucionarlo?
  • Reemplazar espacio a guión
  • ¿Por qué no podemos usar arrays en lugar de varargs?
  • Error en la instalación de Multidex
  • Programe PPTP / L2TP VPN de forma programática en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.