00001 #ifndef SOLIDOBJECT_H_ 00002 #define SOLIDOBJECT_H_ 00003 00004 #include "Object.h" 00005 #include <vector> 00006 #include "../math/Matrix4D.h" 00007 00008 namespace rcrt 00009 { 00010 00011 class Primitive; 00012 00013 class ImageTexture; 00014 00018 class SolidObject : public rcrt::Object 00019 { 00020 protected: 00021 Matrix4D worldMatrix; 00022 Matrix4D invWorldMatrix; 00023 ImageTexture* displMap; 00024 float maxDispl; 00025 int displDens; 00026 00027 public: 00028 SolidObject(std::string name); 00029 virtual ~SolidObject(); 00030 00031 virtual void setPrimitives(std::vector<Primitive*>* prList) =0; 00032 00033 virtual void setWorldMatrix(const Matrix4D& mat); 00034 const Matrix4D& getWorldMatrix() const; 00035 const Matrix4D& getInvWorldMatrix() const; 00036 00041 Vec3D toWorld(const Vec3D& vec) const; 00042 00047 Vec3D toLocal(const Vec3D& vec) const; 00048 00053 Point3D toWorld(const Point3D& vec) const; 00054 00059 Point3D toLocal(const Point3D& vec) const; 00060 00065 Vec3D normalToWorld(const Vec3D& no) const; 00066 00071 Vec3D normalToLocal(const Vec3D& no) const; 00072 00073 00077 void setDisplMap(ImageTexture* it); 00078 00082 void setMaxDispl(float m); 00083 00087 void setDisplDens(int i); 00088 00089 const ImageTexture* const getDisplMap() const; 00090 const float& getMaxDispl() const; 00091 const int& getDisplDens() const; 00092 }; 00093 00094 } 00095 00096 #endif /*SOLIDOBJECT_H_*/