|
|
@@ -31,8 +31,6 @@ Polyhedron::~Polyhedron()
|
|
|
|
|
|
void Polyhedron::Define(const BoundingBox& box)
|
|
|
{
|
|
|
- Clear();
|
|
|
-
|
|
|
Vector3 vertices[8];
|
|
|
vertices[0] = box.min_;
|
|
|
vertices[1] = Vector3(box.max_.x_, box.min_.y_, box.min_.z_);
|
|
|
@@ -43,26 +41,26 @@ void Polyhedron::Define(const BoundingBox& box)
|
|
|
vertices[6] = Vector3(box.min_.x_, box.max_.y_, box.max_.z_);
|
|
|
vertices[7] = box.max_;
|
|
|
|
|
|
- AddFace(vertices[3], vertices[7], vertices[5], vertices[1]);
|
|
|
- AddFace(vertices[6], vertices[2], vertices[0], vertices[4]);
|
|
|
- AddFace(vertices[6], vertices[7], vertices[3], vertices[2]);
|
|
|
- AddFace(vertices[1], vertices[5], vertices[4], vertices[0]);
|
|
|
- AddFace(vertices[7], vertices[6], vertices[4], vertices[5]);
|
|
|
- AddFace(vertices[2], vertices[3], vertices[1], vertices[0]);
|
|
|
+ faces_.Resize(6);
|
|
|
+ SetFace(0, vertices[3], vertices[7], vertices[5], vertices[1]);
|
|
|
+ SetFace(1, vertices[6], vertices[2], vertices[0], vertices[4]);
|
|
|
+ SetFace(2, vertices[6], vertices[7], vertices[3], vertices[2]);
|
|
|
+ SetFace(3, vertices[1], vertices[5], vertices[4], vertices[0]);
|
|
|
+ SetFace(4, vertices[7], vertices[6], vertices[4], vertices[5]);
|
|
|
+ SetFace(5, vertices[2], vertices[3], vertices[1], vertices[0]);
|
|
|
}
|
|
|
|
|
|
void Polyhedron::Define(const Frustum& frustum)
|
|
|
{
|
|
|
- Clear();
|
|
|
-
|
|
|
const Vector3* vertices = frustum.vertices_;
|
|
|
|
|
|
- AddFace(vertices[0], vertices[4], vertices[5], vertices[1]);
|
|
|
- AddFace(vertices[7], vertices[3], vertices[2], vertices[6]);
|
|
|
- AddFace(vertices[7], vertices[4], vertices[0], vertices[3]);
|
|
|
- AddFace(vertices[1], vertices[5], vertices[6], vertices[2]);
|
|
|
- AddFace(vertices[4], vertices[7], vertices[6], vertices[5]);
|
|
|
- AddFace(vertices[3], vertices[0], vertices[1], vertices[2]);
|
|
|
+ faces_.Resize(6);
|
|
|
+ SetFace(0, vertices[0], vertices[4], vertices[5], vertices[1]);
|
|
|
+ SetFace(1, vertices[7], vertices[3], vertices[2], vertices[6]);
|
|
|
+ SetFace(2, vertices[7], vertices[4], vertices[0], vertices[3]);
|
|
|
+ SetFace(3, vertices[1], vertices[5], vertices[6], vertices[2]);
|
|
|
+ SetFace(4, vertices[4], vertices[7], vertices[6], vertices[5]);
|
|
|
+ SetFace(5, vertices[3], vertices[0], vertices[1], vertices[2]);
|
|
|
}
|
|
|
|
|
|
void Polyhedron::AddFace(const Vector3& v0, const Vector3& v1, const Vector3& v2)
|
|
|
@@ -284,3 +282,22 @@ Polyhedron Polyhedron::Transformed(const Matrix3x4& transform) const
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
+
|
|
|
+void Polyhedron::SetFace(unsigned index, const Vector3& v0, const Vector3& v1, const Vector3& v2)
|
|
|
+{
|
|
|
+ Vector<Vector3>& face = faces_[index];
|
|
|
+ face.Resize(3);
|
|
|
+ face[0] = v0;
|
|
|
+ face[1] = v1;
|
|
|
+ face[2] = v2;
|
|
|
+}
|
|
|
+
|
|
|
+void Polyhedron::SetFace(unsigned index, const Vector3& v0, const Vector3& v1, const Vector3& v2, const Vector3& v3)
|
|
|
+{
|
|
|
+ Vector<Vector3>& face = faces_[index];
|
|
|
+ face.Resize(4);
|
|
|
+ face[0] = v0;
|
|
|
+ face[1] = v1;
|
|
|
+ face[2] = v2;
|
|
|
+ face[3] = v3;
|
|
|
+}
|