Проблемы с вращениями в OpenGL - PullRequest
0 голосов
/ 05 марта 2020

Я разрабатываю 3D-приложение в OpenGL и хочу вращать объекты с помощью мыши, как в AutoCad, SolidEdge или другой программе CAD. Кстати, я совершенно новый в 3D программировании и OpenGl. Я пробовал с GL.Rotate, но насколько я знаю, это сложно и не очень привлекательно для пользователя, потому что одно вращение вокруг одной оси влияет на другие. Поэтому я искал и нашел кватернионы. Я думал, что понял, как они работают, но когда я запускаю приложение, GLControl, который я использую, полностью белый. Также в режиме отладки я видел, что Матрица "Мат" полна NaN, и я думаю, что это проблема. AngX и AngY - это углы поворота, которые я изменяю при перемещении мыши. Вот что я сделал:

Основной l oop:

Mat = Matrix4d.Identity; //Global
Vector3d vect1 = new Vector3d(0, -1, 0);
Vector3d vect2 = new Vector3d(-1, 0, 0);
QuatRot1 = new Quaterniond(vect1, AngX);//Global
QuatRot2 = new Quaterniond(vect2, AngY);//Global
QuatRot1.Normalize();
QuatRot2.Normalize();
Quaterniond.Multiply(QuatAcc, QuatRot1);
Quaterniond.Multiply(QuatAcc, QuatRot2);
Matrix4d.CreateFromQuaternion(ref QuatAcc, out Mat);// I think the problem is here
AngX = 0;
AngY = 0;
GL.MultMatrix(ref Mat);

Перемещение мыши:

if (WheelPress)
{   //mouse1 previous mouse position
    //mouse0 current mouse position 
    AngY = 0.1f * (mouse1.X - mouse0.X);
    AngX = 0.1f * (mouse1.Y - mouse0.Y);
    Cursor.Current = Cursors.Hand;
    glControl1.Refresh();
}

PS. Я не знаю, важно ли это, но я работаю с OpenTK

...