У меня есть объект, который я хочу повернуть с помощью мыши в Opengl (я использую перегиб). Я отслеживаю движение мыши и вращаюсь в соответствии с изменением x и y мыши. Но проблема в том, что объект не движется, как я этого хочу. Например, когда я перемещаюсь по x, а затем перемещаюсь по y, а затем снова перемещаюсь в x, объект, кажется, перемещается по диагонали, в то время как я хочу, чтобы он перемещался слева направо. Я знаю, что это связано с тем, что более новые вращения выполняются до более старых поворотов (что приводит к неинтуитивному вращению) из-за того, как работает матричное умножение.Opengl вращать объект с помощью мыши (C++)
Но я не знаю, как решить эту проблему. Один из способов, я думал, это изменить оси, вокруг которых я вращаюсь в соответствии с текущим вращением, но я не знаю, приведет ли это к правильному результату. Еще одна вещь, о которой я думал, - убедиться, что последняя ротация завершена последней (но прежде чем glulookat переведет сцену), но я не знаю, как это сделать. Итак, какой был бы лучший способ решить эту проблему?
Мы понятия не имеем, что такое поведение вашего кода и какое поведение вы считаете правильным. Вам нужно будет добавить свой код и рассказать нам, что он делает и что вы хотите. – beaker
Трудно узнать, что вы хотите, но похоже, что вы после реализации «arcball» какого-то типа. Оригинальная статья Кена Шоемэка [здесь] (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.457.6530&rep=rep1&type=pdf), но вы должны иметь возможность находить реализации и описания [ quaternions] (http://en.wikipedia.org/wiki/Quaternion) онлайн. Кроме того, вам нужен кватернион, описывающий текущее состояние вращения, а во время анимации временный кватернион умножается на ток до тех пор, пока вы не отпустите «мышь», чтобы предотвратить гистерезис. –
Извините, если на 100% не понятно, что я имею в виду. Я googled 'arcball', и это как-то то, что я хочу, но менее строгий, я думаю. Я просто хочу повернуть на основе движения мыши, это не имеет значения, если я или нет, я на самом деле нажимаю на объект. Если я нажму кнопку мыши, и я перейду от скажем, слева направо, я хочу, чтобы объект вращался вокруг оси y. – SilverTear