Skip to main content
GameDev.net gamedev.net
🔒 Locked 🎮 Unity

Rotating Sphere with Euler integration

Started by Irlan Robson Feb 10, 2013 at 2:15 AM 4 replies 2.1k views
Original Post
Irlan Robson
Irlan Robson

Hi everyone. I'm doing my class project and i'm having troubles with Euler integration (witch seems to be the basic)...
The main loop:


torque = position.cross(force);

momentum += dt * force;
//velocity = momentum * (1.0f / mass);

position += velocity * dt;

ang_momentum += torque * dt;
m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia * MakeMatrixFromQuaternion(orientation);
ang_vel = multvm(ang_momentum, m_inertia_inverse); //multiplies a vector by a matrix

orientation += (Quaternion(0, ang_vel.x, ang_vel.y, ang_vel.z) * orientation) * (0.5f * dt);
orientation.normalize();

"g_inertia" is the following matrix3

Ix = Iy = Iz = 0.4f * mass * Mathematics::sqrt(radius);
inertia.m11 = Ix; inertia.m12 = 0; inertia.m13 = 0;
inertia.m21 = 0; inertia.m22 = Iy; inertia.m23 = 0;

inertia.m31 = 0; inertia.m32 = 0; inertia.m33 = Iz;

and i'm rotating like this:

orientation.angleAxis(angle, axis); //quaternion to angle axis
glTranslatef(position.x, position.y, position.z);
glRotatef( angle / Mathematics::pi * 180.0f, axis.x, axis.y, axis.z );

The code is right?

Seems like i'm having trouble with the numbers. They out of range... especially with the angular velocity!

Irlan Robson
Irlan Robson

someone have a similar code ???

DonTzzy
DonTzzy


m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia * MakeMatrixFromQuaternion(orientation);

Would this work?

m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia.Inverse() * MakeMatrixFromQuaternion(orientation);

Irlan Robson
Irlan Robson


m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia * MakeMatrixFromQuaternion(orientation);

Would this work?

m_inertia_inverse = MakeMatrixFromQuaternion(orientation).transpose() * g_inertia.Inverse() * MakeMatrixFromQuaternion(orientation);

thanks but i've already done this in the constructor

DonTzzy
DonTzzy


torque = position.cross(force);

What about:

r = some point on sphere - sphere position;

torque = r.cross( force );

Irlan Robson
Irlan Robson


torque = position.cross(force);

What about:

r = some point on sphere - sphere position;

torque = r.cross( force );

thanks but the only force that actually i have, is the gravity force that is on the constructor ,,,

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.