Matrix44F BaseTransform::space() const { Matrix44F s; s.setTranslation(m_translation); s.setRotation(rotation()); return s; }
Matrix44F BaseTransform::space() const { Matrix44F s; s.setTranslation(m_translation); Matrix33F r = orientation(); s.translate(m_rotatePivotTranslate); s.translate(m_rotatePivot); s.translate(r.transform(m_rotatePivot.reversed())); s.translate(r.transform(m_scalePivotTranslate)); s.translate(r.transform(m_scalePivot)); Vector3F displaceByScaling = m_scalePivot.reversed(); displaceByScaling = displaceByScaling * m_scale; s.translate(r.transform(displaceByScaling)); Matrix33F scaleMatrix; *scaleMatrix.m(0, 0) = m_scale.x; *scaleMatrix.m(1, 1) = m_scale.y; *scaleMatrix.m(2, 2) = m_scale.z; r = scaleMatrix * r; s.setRotation(r); return s; }
const Matrix44F Chassis::computeBogieArmOrigin(const float & chassisWidth, const Vector3F & wheelP, const float & l, const float & s, const float & ang) const { Matrix44F tm; tm.rotateX(-ang); Vector3F p; p.x = chassisWidth * .5f + s * .5f; p.y = wheelP.y + l * .5f * sin(ang); p.z = wheelP.z + l * .5f * cos(ang); tm.setTranslation(p); return tm; }
void MlUVView::drawControlVectors(MlFeather * f) { Vector3F baseP(f->baseUV()); GeoDrawer * dr = getDrawer(); glPushMatrix(); Matrix44F s; s.setTranslation(baseP); float * quill = f->getQuilly(); Vector3F b, a; Vector2F *d; for(short i=0; i <= f->numSegment(); i++) { dr->useSpace(s); a.setZero(); d = f->uvDisplaceAt(i, 0); for(short j = 0; j < 3; j++) { b = d[j]; dr->arrow(a, a + b); a += b; } a.setZero(); d = f->uvDisplaceAt(i, 1); for(short j = 0; j < 3; j++) { b = d[j]; dr->arrow(a, a + b); a += b; } a.setZero(); b.set(0.f, quill[i], 0.f); if(i<f->numSegment()) dr->arrow(a, b); s.setTranslation(b); } glPopMatrix(); }
const Matrix44F Chassis::bogieArmOrigin(const int & i, bool isLeft) const { Matrix44F res; res.rotateX(-m_torsionBarRestAngle); Vector3F cen = roadWheelOrigin(i, isLeft); float d = 1.f; if(!isLeft) d = -d; cen.x += -m_trackWidth * .5f * d + m_bogieArmWidth * .7f * d; cen.z += 0.5f * m_bogieArmLength * cos(m_torsionBarRestAngle); cen.y += 0.5f * m_bogieArmLength * sin(m_torsionBarRestAngle); res.setTranslation(cen); return res; }
void BaseView::frameAll(const BoundingBox & b) { Vector3F eye = b.center(); eye.z = b.getMax(2) + b.distance(0) / hfov() * .55f + 120.f; setEyePosition(eye); Matrix44F m; m.setTranslation(eye); *cameraSpaceR() = m; m.inverse(); *cameraInvSpaceR() = m; setFrustum(1.33f, 1.f, 26.2f, -1.f, -1000.f); }
void MlUVView::drawBindVectors(MlFeather * f) { GeoDrawer * dr = getDrawer(); const Vector3F baseP(f->baseUV()); glPushMatrix(); Matrix44F s; s.setTranslation(baseP); float * quill = f->getQuilly(); Vector3F b; for(short i=0; i < f->numSegment(); i++) { dr->useSpace(s); for(short j=0; j < f->numBind(i); j++) { DeformableFeather::BindCoord *bind = f->getBind(i, j); dr->arrow(Vector3F(0.f, 0.f, 0.f), bind->_objP * 32.f); } b.set(0.f, quill[i], 0.f); s.setTranslation(b); } glPopMatrix(); }