#include "Shape.h" #include "Material.h" #include "RenderState.h" #include "Geometry.h" #include "SceneEntity.h" #include "Transform3.h" namespace CHCDemoEngine { Shape::Shape(Geometry *geometry, Material *mat, SceneEntity *parent): mGeometry(geometry), mMaterial(mat), mParent(parent), mRenderQueueBucket(NULL) { mCenter = GetBoundingBox().Center(); } Shape::~Shape() {} void Shape::Render(RenderState *state) { if (mMaterial) mMaterial->Render(state); mParent->GetTransform()->Load(state); mGeometry->Render(state); mParent->GetTransform()->Unload(state); } void Shape::SetGeometry(Geometry *geom) { mGeometry = geom; } void Shape::SetMaterial(Material *mat) { mMaterial = mat; } AxisAlignedBox3 Shape::GetBoundingBox() const { return mGeometry->GetBoundingBox(); } AxisAlignedBox3 Shape::GetTransformedBoundingBox() const { Matrix4x4 *mat = mParent->GetTransform()->GetMatrix(); if (!mat) return mGeometry->GetBoundingBox(); return Transform(mGeometry->GetBoundingBox(), *mat); } Vector3 Shape::GetCenter() const { Matrix4x4 *mat = mParent->GetTransform()->GetMatrix(); if (!mat) return mCenter; return (*mat) * mCenter; } }