Implement Object::Place

Places the object by manipulating its translation matrix.
This commit is contained in:
Eryn Wells 2014-08-15 22:32:44 -07:00
parent 97b37d3c53
commit 8af03c3f3d
4 changed files with 24 additions and 0 deletions

View file

@ -44,6 +44,16 @@ Matrix4::Identity()
}
/*
* charles::basics::Translation --
*/
/* static */ Matrix4
Matrix4::Translation(const Vector4& p)
{
return Translation(p.X(), p.Y(), p.Z());
}
/*
* charles::basics::TranslationMatrix --
*/

View file

@ -30,6 +30,7 @@ struct Matrix4
/** Create a 4x4 translation matrix. */
static Matrix4 Translation(Double x, Double y, Double z);
static Matrix4 Translation(const Vector4 &p);
Matrix4();
Matrix4(const Double *data);

View file

@ -47,6 +47,16 @@ Object::GetMaterial()
}
/*
* charles::Object::Place --
*/
void
Object::Place(const Vector4 &p)
{
mTranslation = Matrix4::Translation(p);
}
/*
* charles::Object::SetMaterial --
*/

View file

@ -27,6 +27,8 @@ struct Object
Material& GetMaterial();
void SetMaterial(const Material& material);
void Place(const basics::Vector4 &p);
/**
* Determine if the given ray intersects with this object. Converts the
* ray's origin and direction to object space before calling the protected
@ -67,6 +69,7 @@ private:
/** Convert `v` to global space from object space. */
basics::Vector4 FromObjectSpace(const basics::Vector4& v) const;
/** A translation matrix from global coordinates to this object's space. */
basics::Matrix4 mTranslation;