AnimatedMesh.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package de.tudarmstadt.informatik.hostage.ui2.fragment.opengl;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.InputStream;
  4. import java.io.IOException;
  5. import java.nio.ByteBuffer;
  6. import java.nio.ByteOrder;
  7. import java.nio.FloatBuffer;
  8. import android.opengl.GLES20;
  9. import android.util.Log;
  10. public class AnimatedMesh {
  11. private ByteBuffer data;
  12. private int vertexOffset;
  13. private int vertexSize;
  14. private int triangleOffset;
  15. private int triangleCount;
  16. public AnimatedMesh(InputStream is) {
  17. ByteArrayOutputStream out = new ByteArrayOutputStream();
  18. try {
  19. final int EOF = -1;
  20. int len;
  21. byte[] buffer = new byte[1 << 12];
  22. while (EOF != (len = is.read(buffer)))
  23. out.write(buffer, 0, len);
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. return;
  27. }
  28. //data = ByteBuffer.wrap(out.toByteArray());
  29. data = ByteBuffer.allocateDirect(out.size());
  30. data.order(ByteOrder.nativeOrder());
  31. data.put(out.toByteArray());
  32. data.position(0);
  33. int magicNum = data.getInt();
  34. int version = data.getInt();
  35. vertexSize = 48;
  36. vertexOffset = data.getInt();
  37. int vertexCount = data.getInt();
  38. triangleOffset = data.getInt();
  39. triangleCount = data.getInt();
  40. int boneOffset = data.getInt();
  41. int boneCount = data.getInt();
  42. int actionOffset = data.getInt();
  43. int actionCount = data.getInt();
  44. Log.i("tag", data.getFloat()+" "+data.getFloat()+" "+data.getFloat());
  45. }
  46. public void draw() {
  47. int positionIndex = 0;
  48. GLES20.glEnableVertexAttribArray(positionIndex);
  49. data.position(vertexOffset);
  50. GLES20.glVertexAttribPointer(positionIndex, 3, GLES20.GL_FLOAT, false, vertexSize, data.asFloatBuffer());
  51. data.position(triangleOffset);
  52. GLES20.glDrawElements(GLES20.GL_TRIANGLES, 3 * triangleCount, GLES20.GL_UNSIGNED_INT, data.asIntBuffer());
  53. //GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3 * triangleCount);
  54. GLES20.glDisableVertexAttribArray(positionIndex);
  55. }
  56. }