Dear Friends
I am trying to rotate my object with respect to x and y axes, in world space, with a single command as
GL.Rotate(rotationAngle, rotationAxis.X, rotationAxis.Y, rotationAxis.Z);
where rotationAngle is a double and rotationAxis is a Vector in OpenTK.
How can I achieve it ? How can I convert my object space to world space ?
I am trying like the code snippet below.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Vector vector = new Vector();
Vector va = vector.GetMouseVector(m_old_X, m_old_Y, Width, Height);
Vector vb = vector.GetMouseVector(e.X, e.Y, Width, Height);
rotationAngle = Math.Acos(Math.Min(1.0f, vector.DotProduct(va, vb)));
rotationAxis = vector.CrossProduct(va, vb);
int[] viewport = new int[4];
Matrix4d modelViewMatrix, projectionMatrix;
GL.GetInteger(GetPName.Viewport, viewport);
GL.GetDouble(GetPName.ModelviewMatrix, out modelViewMatrix);
GL.GetDouble(GetPName.ProjectionMatrix, out projectionMatrix);
modelViewMatrix.Invert();
Vector4d newvec;
newvec.X = rotationAxis.X;
newvec.Y = rotationAxis.Y;
newvec.Z = rotationAxis.Z;
newvec.W = 1;
Vector4d axisNew = new Vector4d();
axisNew.X = modelViewMatrix.M11 * newvec.X + modelViewMatrix.M12 * newvec.Y + modelViewMatrix.M13 * newvec.Z + modelViewMatrix.M14 * newvec.W;
axisNew.Y = modelViewMatrix.M21 * newvec.X + modelViewMatrix.M22 * newvec.Y + modelViewMatrix.M23 * newvec.Z + modelViewMatrix.M24 * newvec.W;
axisNew.Z = modelViewMatrix.M31 * newvec.X + modelViewMatrix.M32 * newvec.Y + modelViewMatrix.M33 * newvec.Z + modelViewMatrix.M34 * newvec.W;
axisNew.W = modelViewMatrix.M41 * newvec.X + modelViewMatrix.M42 * newvec.Y + modelViewMatrix.M43 * newvec.Z + modelViewMatrix.M44 * newvec.W;
rotationAxis.X = axisNew.X / axisNew.W;
rotationAxis.Y = axisNew.Y / axisNew.W;
rotationAxis.Z = axisNew.Z / axisNew.W;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Any help will be highly appreciated. Thanks in advance, I am using c# & OpenTK.