#include "ObjectPlacer.h" #include "Matrix4x4.h" #include "SceneGraph.h" namespace GtpVisibilityPreprocessor { // --------------------------------------------------------------------------- // ObjectPlacer implementation // --------------------------------------------------------------------------- ObjectPlacer::ObjectPlacer() : mCurrentObject(0) { } void ObjectPlacer::AddObject(SceneGraphLeaf *obj) { mLibraryObjects.push_back(obj); } void ObjectPlacer::NextObject() { mCurrentObject = (mCurrentObject + 1) % (int)mLibraryObjects.size(); } void ObjectPlacer::PreviousObject() { mCurrentObject = (mCurrentObject - 1) % (int)mLibraryObjects.size(); } SceneGraphLeaf *ObjectPlacer::GetCurrentObject() { if (mCurrentObject >= mLibraryObjects.size()) return NULL; return mLibraryObjects[mCurrentObject]; } void ObjectPlacer::PlaceObject(const Vector3 &pt) { Vector3 p = pt; SceneGraphLeaf *obj = mLibraryObjects[mCurrentObject]; // set pivot to ground of object p.y -= obj->GetOriginalBox().Min().y; Matrix4x4 trafo = TranslationMatrix(p); obj->LoadTransform(trafo); } }