diff --git a/OdeWorld.cc b/OdeWorld.cc index f70f03e..c48af07 100644 --- a/OdeWorld.cc +++ b/OdeWorld.cc @@ -510,6 +510,22 @@ void OdeWorld::Object::getPosition(double * x, double * y, double * z) } } +void OdeWorld::Object::setRotation(dReal x, dReal y, dReal z) +{ + dMatrix3 r; + dRFromEulerAngles(r, x, y, z); + if (m_is_static) + { + for (int i = 0, sz = m_geoms.size(); i < sz; i++) + dGeomSetRotation(m_geoms[i], r); + } + else + { + if (m_body != 0) + dBodySetRotation(m_body, r); + } +} + void OdeWorld::Object::addForce(dReal fx, dReal fy, dReal fz) { if (m_body != 0) diff --git a/OdeWorld.h b/OdeWorld.h index cf199cf..593c61c 100644 --- a/OdeWorld.h +++ b/OdeWorld.h @@ -24,6 +24,7 @@ class OdeWorld void loadPhy(const std::string & path); void setPosition(double x, double y, double z); void getPosition(double * x, double * y, double * z); + void setRotation(dReal x, dReal y, dReal z); const dReal * getPosition(); const dReal * getRotation(); std::vector loadPhy(const std::string & path,