コード例 #1
0
ファイル: BoundingVolumes.cpp プロジェクト: panmar/pg3
IntersectionType::Enum BoundingFrustum::Intersects(const BoundingBox& box) const {
    IntersectionType::Enum containment = IntersectionType::Contains;

    Vector3f min = box.GetMin();
    Vector3f max = box.GetMax();
    Vector3f boxCorners[8] = {  Vector3f(min),
                                Vector3f(max),
                                Vector3f(min.x, min.y, max.z),
                                Vector3f(min.x, max.y, min.z),
                                Vector3f(min.x, max.y, max.z),
                                Vector3f(max.x, min.y, min.z),
                                Vector3f(max.x, min.y, max.z),
                                Vector3f(max.x, max.y, min.z)
                             };

    for(U32 i = 0; i < 6; ++i) {
        U32 out = 0;                                                //number of box corners "outside" plane
        for(U32 j = 0; j < 8; ++j) {
            if (planes[i].DistanceToPoint(boxCorners[j]) < 0) {
                ++out;
            }
        }

        if (out == 8) {
            return IntersectionType::Disjoint;                      //all corners outside
        } else if (out != 0) {
            containment = IntersectionType::Intersection;           //some outside, some inside... continue testing
        }
    }

    return containment;
}
コード例 #2
0
ファイル: CollisionShape.cpp プロジェクト: ibachar/firecube
void CollisionShape::SetBox(BoundingBox bbox)
{
	type = CollisionShapeType::BOX;
	box = bbox;
	vec3 bmin = bbox.GetMin();
	vec3 bmax = bbox.GetMax();	
	collisionMesh = new CollisionMesh;
	// Front
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmax.z), vec3(bmax.x, bmin.y, bmax.z), vec3(bmax.x, bmax.y, bmax.z)));
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmax.z), vec3(bmax.x, bmax.y, bmax.z), vec3(bmin.x, bmax.y, bmax.z)));
	// Back
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmin.z), vec3(bmin.x, bmax.y, bmin.z), vec3(bmax.x, bmax.y, bmin.z)));
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmin.z), vec3(bmax.x, bmax.y, bmin.z), vec3(bmax.x, bmin.y, bmin.z)));
	// Right
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmax.x, bmin.y, bmax.z), vec3(bmax.x, bmin.y, bmin.z), vec3(bmax.x, bmax.y, bmin.z)));
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmax.x, bmin.y, bmax.z), vec3(bmax.x, bmax.y, bmin.z), vec3(bmax.x, bmax.y, bmax.z)));
	// Left
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmax.z), vec3(bmin.x, bmax.y, bmax.z), vec3(bmin.x, bmax.y, bmin.z)));
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmax.z), vec3(bmin.x, bmax.y, bmin.z), vec3(bmin.x, bmin.y, bmin.z)));
	// Top
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmax.y, bmax.z), vec3(bmax.x, bmax.y, bmax.z), vec3(bmax.x, bmax.y, bmin.z)));
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmax.y, bmax.z), vec3(bmax.x, bmax.y, bmin.z), vec3(bmin.x, bmax.y, bmin.z)));
	// Bottom
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmax.z), vec3(bmin.x, bmin.y, bmin.z), vec3(bmax.x, bmin.y, bmin.z)));
	collisionMesh->triangles.push_back(CollisionTriangle(vec3(bmin.x, bmin.y, bmax.z), vec3(bmax.x, bmin.y, bmin.z), vec3(bmax.x, bmin.y, bmax.z)));

	MarkedDirty();
}
コード例 #3
0
ファイル: DebugRenderer.cpp プロジェクト: panmar/pg2
 void DebugRenderer::AddWireBox(const BoundingBox& bbox, const Matrix& transform, const Color& color, Lifespan lifespan) {
     Vector3f min = bbox.GetMin();
     Vector3f max = bbox.GetMax();
     Vector3f translation = (min + max) / 2.0f;
     Vector3f scale(max.x - min.x, max.y - min.y, max.z - min.z);
     Matrix newTransform = Matrix::CreateScale(scale) * Matrix::CreateTranslation(translation) * transform;
     AddWireBox(newTransform, color, lifespan);
 }
コード例 #4
0
    void BufferedPrimitiveRenderer::DrawWireBox(const BoundingBox& bbox,
        const Matrix& transform,
        const Color& color /*= DefaultColor*/,
        DebugLifespan::Enum lifespan /*= DebugLifespan::Temporary*/,
        bool depthEnabled /*= false*/, 
        bool antiAliased /*= false*/) {

        Vector3f min = bbox.GetMin();
        Vector3f max = bbox.GetMax();
        Vector3f translation = (min + max) / 2.0f;
        Vector3f scale(max.x - min.x, max.y - min.y, max.z - min.z);
        Matrix newTransform = Matrix::CreateScale(scale) * Matrix::CreateTranslation(translation) * transform;
        DrawWireBox(newTransform, color, lifespan, depthEnabled, antiAliased);
    }
コード例 #5
0
ファイル: DrawManager.cpp プロジェクト: johannawald/ICT207
void DrawManager::DrawCollisionBoxColored(const BoundingBox& pBoundingBox) const
{
	glBegin(GL_QUADS);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
    glEnd();

    glBegin(GL_QUADS);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMax().y,pBoundingBox.GetMin().z);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMax().y,pBoundingBox.GetMin().z);
    glEnd();

    glBegin(GL_QUADS);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMin().y,pBoundingBox.GetMin().z);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMin().y,pBoundingBox.GetMin().z);
    glEnd();
}
コード例 #6
0
ファイル: Renderer.cpp プロジェクト: PanosK92/Directus3D
	void Renderer::DrawBox(const BoundingBox& box, const Vector4& color, const bool depth /*= true*/)
	{
		const auto& min = box.GetMin();
		const auto& max = box.GetMax();
	
		DrawLine(Vector3(min.x, min.y, min.z), Vector3(max.x, min.y, min.z), color, depth);
		DrawLine(Vector3(max.x, min.y, min.z), Vector3(max.x, max.y, min.z), color, depth);
		DrawLine(Vector3(max.x, max.y, min.z), Vector3(min.x, max.y, min.z), color, depth);
		DrawLine(Vector3(min.x, max.y, min.z), Vector3(min.x, min.y, min.z), color, depth);
		DrawLine(Vector3(min.x, min.y, min.z), Vector3(min.x, min.y, max.z), color, depth);
		DrawLine(Vector3(max.x, min.y, min.z), Vector3(max.x, min.y, max.z), color, depth);
		DrawLine(Vector3(max.x, max.y, min.z), Vector3(max.x, max.y, max.z), color, depth);
		DrawLine(Vector3(min.x, max.y, min.z), Vector3(min.x, max.y, max.z), color, depth);
		DrawLine(Vector3(min.x, min.y, max.z), Vector3(max.x, min.y, max.z), color, depth);
		DrawLine(Vector3(max.x, min.y, max.z), Vector3(max.x, max.y, max.z), color, depth);
		DrawLine(Vector3(max.x, max.y, max.z), Vector3(min.x, max.y, max.z), color, depth);
		DrawLine(Vector3(min.x, max.y, max.z), Vector3(min.x, min.y, max.z), color, depth);
	}
コード例 #7
0
ファイル: BoundingVolumes.cpp プロジェクト: panmar/pg3
BoundingBox BoundingBox::Transform(const BoundingBox& bbox, const Matrix& transform) {
    Vector3f min = Vector3f::Transform(bbox.GetMin(), transform);
    Vector3f max = Vector3f::Transform(bbox.GetMax(), transform);
    return BoundingBox(min, max);
}
コード例 #8
0
ファイル: DrawManager.cpp プロジェクト: johannawald/ICT207
void DrawManager::DrawCollisionBox(const BoundingBox& pBoundingBox) const
{
    glBegin(GL_LINE_LOOP);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMax().y,pBoundingBox.GetMin().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMax().y,pBoundingBox.GetMin().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMin().y,pBoundingBox.GetMin().z);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMin().y,pBoundingBox.GetMin().z);
    glEnd();

    glBegin(GL_LINE_LOOP);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
    glEnd();

    glBegin(GL_LINE_LOOP);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMax().y,pBoundingBox.GetMin().z);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMax().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMax().y,pBoundingBox.GetMin().z);
    glEnd();

    glBegin(GL_LINE_LOOP);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMin().y,pBoundingBox.GetMax().z);
		glVertex3f(pBoundingBox.GetMin().x,pBoundingBox.GetMin().y,pBoundingBox.GetMin().z);
		glVertex3f(pBoundingBox.GetMax().x,pBoundingBox.GetMin().y,pBoundingBox.GetMin().z);
    glEnd();
}