charles/src/object.cc

154 lines
2 KiB
C++
Raw Normal View History

2013-09-07 16:09:19 -07:00
/* object.c
*
* Definition of generic scene objects.
2013-09-07 16:09:19 -07:00
*
* Eryn Wells <eryn@erynwells.me>
*/
#include <cassert>
#include <cmath>
#include <cstdlib>
2013-09-07 22:22:27 -07:00
2014-08-09 10:42:49 -07:00
#include "object.hh"
2014-08-09 21:23:11 -07:00
#include "material.hh"
#include "basics/basics.hh"
2014-08-09 10:42:49 -07:00
using charles::basics::Ray;
using charles::basics::Matrix4;
using charles::basics::Vector4;
2013-09-07 16:09:19 -07:00
namespace charles {
/*
* charles::Object::Object --
*/
Object::Object(const Vector4& origin)
: mTranslation(Matrix4::Translation(origin)),
mMaterial()
{ }
/*
2014-08-09 08:59:11 -07:00
* charles::Object::~Object --
*/
Object::~Object()
{ }
2013-09-07 18:26:32 -07:00
2014-08-09 10:42:49 -07:00
/*
* charles::Object::GetMaterial --
*/
Material&
Object::GetMaterial()
{
return mMaterial;
}
/*
* charles::Object::Place --
*/
void
Object::Place(const Vector4 &p)
{
mTranslation = Matrix4::Translation(p);
}
2014-08-09 10:42:49 -07:00
/*
* charles::Object::SetMaterial --
*/
void
Object::SetMaterial(const Material& material)
{
mMaterial = material;
}
/*
* charles::Object::Intersect --
*/
bool
Object::Intersect(const basics::Ray& ray,
TVector& t,
Stats& stats)
const
{
2014-08-09 10:42:49 -07:00
return DoIntersect(ToObjectSpace(ray), t, stats);
}
/*
* charles::Object::Normal --
*/
Vector4
Object::Normal(const Vector4& p)
const
{
return FromObjectSpace(DoNormal(ToObjectSpace(p)));
}
/*
* charles::Object::ToObjectSpace --
*/
2014-08-09 10:42:49 -07:00
Ray
Object::ToObjectSpace(Ray ray)
const
{
ray.origin = mTranslation * ray.origin;
return ray;
}
2014-08-09 10:42:49 -07:00
/*
* charles::Object::ToObjectSpace --
*/
Vector4
Object::ToObjectSpace(const Vector4& v)
const
{
return mTranslation * v;
}
/*
* charles::Object::FromObjectSpace --
*/
Vector4
Object::FromObjectSpace(const Vector4& v)
const
{
return Inverse(mTranslation) * v;
2014-08-09 10:42:49 -07:00
}
/*
* charles::Object::Write --
*/
void
Object::Write(std::ostream& ost)
const
{
ost << "[Object]";
}
2014-08-09 10:42:49 -07:00
/*
* charles::operator<< --
*/
std::ostream&
operator<<(std::ostream& ost,
const Object& object)
{
2014-08-16 00:43:43 -07:00
ost << "[";
object.Write(ost);
2014-08-16 00:43:43 -07:00
ost << " translate=" << object.mTranslation.Column(3) << "]";
return ost;
}
} /* namespace charles */