}
}
-void Shape::Outline(
- OutlineModel::Buffer &out,
- const OutlineModel::Position &elem_offset,
- OutlineModel::Index idx_offset
+void Shape::Vertices(
+ SkyBoxModel::Buffer &out
) const {
- for (const auto &pos : out_pos) {
- out.vertices.emplace_back(elem_offset + pos);
+ for (const auto &pos : vtx_pos) {
+ out.vertices.emplace_back(pos);
}
- for (auto idx : out_idx) {
- out.indices.emplace_back(idx_offset + idx);
+ for (auto idx : vtx_idx) {
+ out.indices.emplace_back(idx);
}
}
+void Shape::Outline(OutlineModel::Buffer &out) const {
+ out.vertices.insert(out.vertices.end(), out_pos.begin(), out_pos.end());
+ out.indices.insert(out.indices.end(), out_idx.begin(), out_idx.end());
+}
+
void Shape::SetShape(
const EntityModel::Positions &pos,
const EntityModel::Normals &nrm,
8, 9, 9, 11, 11, 10, 10 , 8, // top
0, 8, 4, 10, 2, 6, // verticals, btf
1, 9, 5, 11, 3, 7,
- // 5, 8, 7, 10,
- // 1, 9, 3, 11,
});
}
const glm::mat4 &M,
const AABB &box,
const glm::mat4 &box_M,
- float &depth,
+ float &dist,
glm::vec3 &normal
) const noexcept {
- // TODO: this is wrong, but simple. so for now will have to do
- return Intersection(bot, M, box, box_M, depth, normal) || Intersection(top, M, box, box_M, depth, normal);
+ bool top_hit, bot_hit;
+ float top_dist, bot_dist;
+ glm::vec3 top_normal, bot_normal;
+
+ top_hit = Intersection(bot, M, box, box_M, top_dist, top_normal);
+ bot_hit = Intersection(top, M, box, box_M, bot_dist, bot_normal);
+
+ if (top_hit) {
+ if (bot_hit && bot_dist < top_dist) {
+ dist = bot_dist;
+ normal = bot_normal;
+ return true;
+ } else {
+ dist = top_dist;
+ normal = top_normal;
+ return true;
+ }
+ return true;
+ } else if (bot_hit) {
+ dist = bot_dist;
+ normal = bot_normal;
+ return true;
+ } else {
+ return false;
+ }
}
}