2
0

milk.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #include "milk.h"
  2. float vertexDataOriginal[] = {
  3. //front
  4. 0.5, 0.5, 0.5,
  5. -0.5, 0.5, 0.5,
  6. -0.5, -0.5, 0.5,
  7. -0.5, -0.5, 0.5,
  8. 0.5, -0.5, 0.5,
  9. 0.5, 0.5, 0.5,
  10. //back
  11. -0.5, -0.5, -0.5,
  12. -0.5, 0.5, -0.5,
  13. 0.5, 0.5, -0.5,
  14. 0.5, 0.5, -0.5,
  15. 0.5, -0.5, -0.5,
  16. -0.5, -0.5, -0.5,
  17. //top
  18. -0.5, 0.5, -0.5,
  19. -0.5, 0.5, 0.5,
  20. 0.5, 0.5, 0.5,
  21. 0.5, 0.5, 0.5,
  22. 0.5, 0.5, -0.5,
  23. -0.5, 0.5, -0.5,
  24. //bottom
  25. 0.5, -0.5, 0.5,
  26. -0.5, -0.5, 0.5,
  27. -0.5, -0.5, -0.5,
  28. -0.5, -0.5, -0.5,
  29. 0.5, -0.5, -0.5,
  30. 0.5, -0.5, 0.5,
  31. //left
  32. -0.5, -0.5, 0.5,
  33. -0.5, 0.5, 0.5,
  34. -0.5, 0.5, -0.5,
  35. -0.5, 0.5, -0.5,
  36. -0.5, -0.5, -0.5,
  37. -0.5, -0.5, 0.5,
  38. //right
  39. 0.5, 0.5, -0.5,
  40. 0.5, 0.5, 0.5,
  41. 0.5, -0.5, 0.5,
  42. 0.5, -0.5, 0.5,
  43. 0.5, -0.5, -0.5,
  44. 0.5, 0.5, -0.5,
  45. };
  46. float vertexUVOriginal[] = {
  47. //front
  48. 1, 1,
  49. 0, 1,
  50. 0, 0,
  51. 0, 0,
  52. 1, 0,
  53. 1, 1,
  54. //back
  55. 0, 0,
  56. 0, 1,
  57. 1, 1,
  58. 1, 1,
  59. 1, 0,
  60. 0, 0,
  61. //top
  62. 0, 0,
  63. 0, 1,
  64. 1, 1,
  65. 1, 1,
  66. 1, 0,
  67. 0, 0,
  68. //bottom
  69. 1, 1,
  70. 0, 1,
  71. 0, 0,
  72. 0, 0,
  73. 1, 0,
  74. 1, 1,
  75. //left
  76. 1, 0,
  77. 1, 1,
  78. 0, 1,
  79. 0, 1,
  80. 0, 0,
  81. 1, 0,
  82. //right
  83. 0, 1,
  84. 1, 1,
  85. 1, 0,
  86. 1, 0,
  87. 0, 0,
  88. 0, 1,
  89. };
  90. gl3d::Model Milk::createCubeModel(glm::vec3 size)
  91. {
  92. std::vector<float> data;
  93. data.reserve(2000);
  94. for (int face = 0; face < 6; face++)
  95. {
  96. glm::vec3 normal = {};
  97. glm::vec3 positions[3] = {};
  98. for (int i = 0; i < 3; i++)
  99. {
  100. positions[i].x = vertexDataOriginal[i * 3 + face * 3 * 6 + 0];
  101. positions[i].y = vertexDataOriginal[i * 3 + face * 3 * 6 + 1];
  102. positions[i].z = vertexDataOriginal[i * 3 + face * 3 * 6 + 2];
  103. }
  104. glm::vec3 edge1 = positions[1] - positions[0];
  105. glm::vec3 edge2 = positions[2] - positions[0];
  106. normal = glm::normalize(glm::cross(edge1, edge2));
  107. for (int i = 0; i < 6; i++)
  108. {
  109. data.push_back(vertexDataOriginal[i * 3 + face * 3 * 6 + 0] * size.x);
  110. data.push_back(vertexDataOriginal[i * 3 + face * 3 * 6 + 1] * size.y);
  111. data.push_back(vertexDataOriginal[i * 3 + face * 3 * 6 + 2] * size.z);
  112. data.push_back(normal.x);
  113. data.push_back(normal.y);
  114. data.push_back(normal.z);
  115. if (face == 0)
  116. {
  117. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 0] * size.x * 0.25);
  118. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 1] * size.y * 0.25);
  119. }
  120. else if (face == 1)
  121. {
  122. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 0] * size.x * 0.25);
  123. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 1] * size.y * 0.25);
  124. }
  125. else if (face == 2)
  126. {
  127. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 0] * size.x * 0.25);
  128. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 1] * size.z * 0.25);
  129. }
  130. else if (face == 3)
  131. {
  132. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 0] * size.x * 0.25);
  133. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 1] * size.z * 0.25);
  134. }
  135. else if (face == 4)
  136. {
  137. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 0] * size.z * 0.25);
  138. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 1] * size.y * 0.25);
  139. }
  140. else if (face == 5)
  141. {
  142. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 0] * size.z * 0.25);
  143. data.push_back(vertexUVOriginal[i * 2 + face * 2 * 6 + 1] * size.y * 0.25);
  144. }
  145. }
  146. }
  147. /*
  148. position vec3
  149. normals vec3
  150. (optional) texcoords vec2
  151. (optional) joints id ivec4
  152. (optional) joints weights vec4
  153. */
  154. return renderer.createModelFromData(floorMaterial, "cube", data.size(), data.data());
  155. }