Exemple #1
0
Matrix44F BaseTransform::space() const
{
	Matrix44F s;
	s.setTranslation(m_translation);
	s.setRotation(rotation());
	return s;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #4
0
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();
}
Exemple #5
0
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;
}
Exemple #6
0
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);
}
Exemple #7
0
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();
}