nuclear@17: #include nuclear@2: #include "object.h" nuclear@17: #include "geomobj.h" nuclear@17: #include "snode.h" nuclear@17: nuclear@17: RayHit::RayHit() nuclear@17: { nuclear@17: dist = 0; nuclear@17: node = 0; nuclear@17: obj = subobj = 0; nuclear@17: } nuclear@17: nuclear@17: Vector3 RayHit::calc_normal() const nuclear@17: { nuclear@17: assert(obj->get_type() == ObjType::geom); nuclear@17: Vector3 norm = ((const GeomObject*)obj)->calc_normal(*this); nuclear@17: nuclear@17: const Matrix4x4 &xform = node->get_inv_matrix(); nuclear@23: return norm.transformed(Matrix3x3(xform).transposed()).normalized(); nuclear@17: } nuclear@17: nuclear@17: Vector3 RayHit::calc_tangent() const nuclear@17: { nuclear@17: assert(obj->get_type() == ObjType::geom); nuclear@17: Vector3 tang = ((const GeomObject*)obj)->calc_tangent(*this); nuclear@17: nuclear@17: const Matrix4x4 &xform = node->get_matrix(); nuclear@17: return tang.transformed(Matrix3x3(xform).transposed()); nuclear@17: } nuclear@17: nuclear@17: Vector2 RayHit::calc_texcoords() const nuclear@17: { nuclear@17: assert(obj->get_type() == ObjType::geom); nuclear@17: return ((const GeomObject*)obj)->calc_texcoords(*this); nuclear@17: } nuclear@17: nuclear@2: nuclear@2: Object::Object() nuclear@2: { nuclear@2: name = ""; nuclear@2: } nuclear@2: nuclear@2: ObjType Object::get_type() const nuclear@2: { nuclear@2: return ObjType::null; nuclear@2: } nuclear@2: nuclear@2: void Object::set_name(const char *name) nuclear@2: { nuclear@2: this->name = name; nuclear@2: } nuclear@2: nuclear@2: const char *Object::get_name() const nuclear@2: { nuclear@2: return name.c_str(); nuclear@2: } nuclear@2: nuclear@2: bool Object::intersect(const Ray &ray, RayHit *hit) const nuclear@2: { nuclear@2: return false; nuclear@2: }