erebus

annotate liberebus/src/object.cc @ 18:09028848f276

- implemented Box object intersection - implemented interactive camera manipulation
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 26 May 2014 23:34:12 +0300
parents a932848de652
children 56d504cc555a
rev   line source
nuclear@17 1 #include <assert.h>
nuclear@2 2 #include "object.h"
nuclear@17 3 #include "geomobj.h"
nuclear@17 4 #include "snode.h"
nuclear@17 5
nuclear@17 6 RayHit::RayHit()
nuclear@17 7 {
nuclear@17 8 dist = 0;
nuclear@17 9 node = 0;
nuclear@17 10 obj = subobj = 0;
nuclear@17 11 }
nuclear@17 12
nuclear@17 13 Vector3 RayHit::calc_normal() const
nuclear@17 14 {
nuclear@17 15 assert(obj->get_type() == ObjType::geom);
nuclear@17 16 Vector3 norm = ((const GeomObject*)obj)->calc_normal(*this);
nuclear@17 17
nuclear@17 18 const Matrix4x4 &xform = node->get_inv_matrix();
nuclear@17 19 return norm.transformed(Matrix3x3(xform).transposed());
nuclear@17 20 }
nuclear@17 21
nuclear@17 22 Vector3 RayHit::calc_tangent() const
nuclear@17 23 {
nuclear@17 24 assert(obj->get_type() == ObjType::geom);
nuclear@17 25 Vector3 tang = ((const GeomObject*)obj)->calc_tangent(*this);
nuclear@17 26
nuclear@17 27 const Matrix4x4 &xform = node->get_matrix();
nuclear@17 28 return tang.transformed(Matrix3x3(xform).transposed());
nuclear@17 29 }
nuclear@17 30
nuclear@17 31 Vector2 RayHit::calc_texcoords() const
nuclear@17 32 {
nuclear@17 33 assert(obj->get_type() == ObjType::geom);
nuclear@17 34 return ((const GeomObject*)obj)->calc_texcoords(*this);
nuclear@17 35 }
nuclear@17 36
nuclear@2 37
nuclear@2 38 Object::Object()
nuclear@2 39 {
nuclear@2 40 name = "<unnamed>";
nuclear@2 41 }
nuclear@2 42
nuclear@2 43 ObjType Object::get_type() const
nuclear@2 44 {
nuclear@2 45 return ObjType::null;
nuclear@2 46 }
nuclear@2 47
nuclear@2 48 void Object::set_name(const char *name)
nuclear@2 49 {
nuclear@2 50 this->name = name;
nuclear@2 51 }
nuclear@2 52
nuclear@2 53 const char *Object::get_name() const
nuclear@2 54 {
nuclear@2 55 return name.c_str();
nuclear@2 56 }
nuclear@2 57
nuclear@2 58 bool Object::intersect(const Ray &ray, RayHit *hit) const
nuclear@2 59 {
nuclear@2 60 return false;
nuclear@2 61 }