-void CuboidShape::Outline(std::vector<glm::vec3> &out, const glm::vec3 &pos) const {
- out.reserve(24);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.min.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.max.z);
- out.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.max.z);
+void CuboidShape::Vertices(
+ std::vector<glm::vec3> &vtx,
+ std::vector<glm::vec3> &norm,
+ std::vector<Model::Index> &index,
+ const glm::vec3 &pos,
+ Model::Index idx
+) const {
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.max.z); // front
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.min.z); // back
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.min.z); // top
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.min.z); // bottom
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.min.z); // left
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.min.z); // right
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.max.z);
+
+ norm.insert(norm.end(), 4, glm::vec3( 0.0f, 0.0f, 1.0f)); // front
+ norm.insert(norm.end(), 4, glm::vec3( 0.0f, 0.0f, -1.0f)); // back
+ norm.insert(norm.end(), 4, glm::vec3( 0.0f, 1.0f, 0.0f)); // top
+ norm.insert(norm.end(), 4, glm::vec3( 0.0f, -1.0f, 0.0f)); // bottom
+ norm.insert(norm.end(), 4, glm::vec3(-1.0f, 0.0f, 0.0f)); // left
+ norm.insert(norm.end(), 4, glm::vec3( 1.0f, 0.0f, 0.0f)); // right
+
+ index.emplace_back(idx + 0); // front
+ index.emplace_back(idx + 1);
+ index.emplace_back(idx + 2);
+ index.emplace_back(idx + 2);
+ index.emplace_back(idx + 1);
+ index.emplace_back(idx + 3);
+ index.emplace_back(idx + 4); // back
+ index.emplace_back(idx + 5);
+ index.emplace_back(idx + 6);
+ index.emplace_back(idx + 6);
+ index.emplace_back(idx + 5);
+ index.emplace_back(idx + 7);
+ index.emplace_back(idx + 8); // top
+ index.emplace_back(idx + 9);
+ index.emplace_back(idx + 10);
+ index.emplace_back(idx + 10);
+ index.emplace_back(idx + 9);
+ index.emplace_back(idx + 11);
+ index.emplace_back(idx + 12); // bottom
+ index.emplace_back(idx + 13);
+ index.emplace_back(idx + 14);
+ index.emplace_back(idx + 14);
+ index.emplace_back(idx + 13);
+ index.emplace_back(idx + 15);
+ index.emplace_back(idx + 16); // left
+ index.emplace_back(idx + 17);
+ index.emplace_back(idx + 18);
+ index.emplace_back(idx + 18);
+ index.emplace_back(idx + 17);
+ index.emplace_back(idx + 19);
+ index.emplace_back(idx + 20); // right
+ index.emplace_back(idx + 21);
+ index.emplace_back(idx + 22);
+ index.emplace_back(idx + 22);
+ index.emplace_back(idx + 21);
+ index.emplace_back(idx + 23);
+}
+
+void CuboidShape::Outline(
+ std::vector<glm::vec3> &vtx,
+ std::vector<OutlineModel::Index> &index,
+ const glm::vec3 &pos,
+ OutlineModel::Index idx
+) const {
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.min.z); // back
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.min.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.min.y, pos.z + bb.max.z); // front
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.min.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.min.x, pos.y + bb.max.y, pos.z + bb.max.z);
+ vtx.emplace_back(pos.x + bb.max.x, pos.y + bb.max.y, pos.z + bb.max.z);
+
+ index.emplace_back(idx + 0); // back
+ index.emplace_back(idx + 1);
+ index.emplace_back(idx + 1);
+ index.emplace_back(idx + 3);
+ index.emplace_back(idx + 3);
+ index.emplace_back(idx + 2);
+ index.emplace_back(idx + 2);
+ index.emplace_back(idx + 0);
+ index.emplace_back(idx + 4); // front
+ index.emplace_back(idx + 5);
+ index.emplace_back(idx + 5);
+ index.emplace_back(idx + 7);
+ index.emplace_back(idx + 7);
+ index.emplace_back(idx + 6);
+ index.emplace_back(idx + 6);
+ index.emplace_back(idx + 4);
+ index.emplace_back(idx + 0); // sides
+ index.emplace_back(idx + 4);
+ index.emplace_back(idx + 1);
+ index.emplace_back(idx + 5);
+ index.emplace_back(idx + 2);
+ index.emplace_back(idx + 6);
+ index.emplace_back(idx + 3);
+ index.emplace_back(idx + 7);