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
.
- Google Maps Fragment no se carga
- No se puede copiar la base de datos SQLite de los activos
- Java android - CookieHandler - ¿Cómo mantener las cookies después de cerrar la aplicación?
- ¿Cómo obtener tablas columnas arraylist en Android?
- Ejecutar gradle -v devuelve "JAVA_HOME está establecido en un directorio no válido" aunque tenga un JAVA_HOME válido
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);
- Notificación Push de Android C2DM
- ¿Cómo iniciar la actividad en el adaptador?
- ¿Cómo obtener el tamaño del diálogo?
- Enviar eficientemente int a través de sockets en Java
- ¿Cómo comprobar si el paquete existe desde dentro del procesador de anotación (en tiempo de compilación)?
- Formato Flotación a n decimales
- Android Bluetooth java.io.IOException: Conexión rechazada?
- Enviar texto a través de Bluetooth desde Java Server a Android Client
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);
- EditText en ListView sin reciclar entrada
- ¿Cuál es la mejor manera de almacenar datos como "Favoritos" en una aplicación para Android?