Mesh.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "Mesh.h"
  2. #include <cstring>
  3. #include <iostream>
  4. using namespace std;
  5. Mesh::Mesh()
  6. {
  7. data = new float[dataSize * 7];
  8. }
  9. Mesh::Mesh(const Mesh& orig)
  10. {
  11. }
  12. Mesh::~Mesh()
  13. {
  14. delete[] data;
  15. glDeleteVertexArrays(1, &vba);
  16. glDeleteBuffers(1, &vbo);
  17. }
  18. void Mesh::init()
  19. {
  20. glGenVertexArrays(1, &vba);
  21. glBindVertexArray(vba);
  22. glGenBuffers(1, &vbo);
  23. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  24. glVertexAttribPointer(0, 3, GL_FLOAT, 0, 28, (GLvoid*) 0);
  25. glEnableVertexAttribArray(0);
  26. glVertexAttribPointer(1, 4, GL_FLOAT, 0, 28, (GLvoid*) 12);
  27. glEnableVertexAttribArray(1);
  28. }
  29. void Mesh::addPoint(float x, float y, float z, float r, float g, float b, float a)
  30. {
  31. if(vertices >= dataSize)
  32. {
  33. float* newData = new float[dataSize * 2 * 7];
  34. memcpy(newData, data, sizeof(float) * dataSize * 7);
  35. delete[] data;
  36. data = newData;
  37. dataSize *= 2;
  38. }
  39. unsigned int index = vertices * 7;
  40. data[index] = x;
  41. data[index + 1] = y;
  42. data[index + 2] = z;
  43. data[index + 3] = r;
  44. data[index + 4] = g;
  45. data[index + 5] = b;
  46. data[index + 6] = a;
  47. vertices++;
  48. }
  49. void Mesh::build()
  50. {
  51. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  52. /*for(int i = 0; i < vertices; i++)
  53. {
  54. int index = i * 7;
  55. cout << data[index] << " " << data[index + 1] << " " << data[index + 2]
  56. << " " << data[index + 3] << " " << data[index + 4] << " "
  57. << data[index + 5] << " " << data[index + 6] << endl;
  58. }*/
  59. glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 7 * vertices, data, GL_STATIC_DRAW);
  60. }
  61. void Mesh::draw()
  62. {
  63. glBindVertexArray(vba);
  64. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  65. glDrawArrays(GL_TRIANGLES, 0, vertices);
  66. }