00001 #include "SolidObject.h" 00002 00003 using namespace std; 00004 00005 namespace rcrt 00006 { 00007 00008 SolidObject::SolidObject(string name):Object(name), 00009 worldMatrix(Matrix4D::identity()),invWorldMatrix(Matrix4D::identity()) 00010 { 00011 } 00012 00013 SolidObject::~SolidObject() 00014 { 00015 00016 } 00017 00018 void SolidObject::setWorldMatrix(const Matrix4D& mat) 00019 { 00020 worldMatrix = mat; 00021 invWorldMatrix = mat.inverse(); 00022 } 00023 00024 const Matrix4D& SolidObject::getWorldMatrix() const 00025 { 00026 return worldMatrix; 00027 } 00028 00029 const Matrix4D& SolidObject::getInvWorldMatrix() const 00030 { 00031 return invWorldMatrix; 00032 } 00033 00034 Vec3D SolidObject::toWorld(const Vec3D& vec) const 00035 { 00036 return worldMatrix*vec; 00037 } 00038 00039 Vec3D SolidObject::toLocal(const Vec3D& vec) const 00040 { 00041 return invWorldMatrix*vec; 00042 } 00043 00044 Point3D SolidObject::toWorld(const Point3D& p) const 00045 { 00046 return worldMatrix*p; 00047 } 00048 00049 Point3D SolidObject::toLocal(const Point3D& p) const 00050 { 00051 return invWorldMatrix*p; 00052 } 00053 00054 Vec3D SolidObject::normalToWorld(const Vec3D& no) const 00055 { 00056 return (invWorldMatrix.transpose()*no).normalize(); 00057 } 00058 00059 Vec3D SolidObject::normalToLocal(const Vec3D& no) const 00060 { 00061 return (worldMatrix.transpose()*no).normalize(); 00062 } 00063 00064 void SolidObject::setDisplMap(ImageTexture* it) 00065 { 00066 displMap = it; 00067 } 00068 void SolidObject::setMaxDispl(float m) 00069 { 00070 maxDispl = m; 00071 } 00072 void SolidObject::setDisplDens(int i) 00073 { 00074 displDens = i; 00075 } 00076 00077 const ImageTexture* const SolidObject::getDisplMap() const 00078 { 00079 return displMap; 00080 } 00081 00082 const float& SolidObject::getMaxDispl() const 00083 { 00084 return maxDispl; 00085 } 00086 00087 const int& SolidObject::getDisplDens() const 00088 { 00089 return displDens; 00090 } 00091 00092 }