Плавное вращение 3D сцены, как у Blender's - PullRequest
0 голосов
/ 23 января 2020

Я работаю над приложением, которое рендерит трехмерный мир и хотел бы реализовать вращение сцены, как это делает Blender. Вы можете увидеть это в видео здесь: https://youtu.be/ILqOWe3zAbk?list=PLa1F2ddGya_-UvuAqHAksYnB0qL9yWDO6&t=66 (я не говорю о взаимодействии с gyzmo, но о том, как камера вращается, когда пользователь тащит мышь)

Я реализовал вращение трекбола, но у меня есть два аспекта, которые меня беспокоят:

  1. сцена не вращается достаточно (или достаточно быстро),
  2. вращение останавливается, когда вы приближаетесь к краю window.

Для первой точки простое умножение угла поворота не решает проблему. Фактически это создает еще одну: когда угол выходит за пределы 1 радиана, то повороты ужасно резкие, даже небольшое изменение курсора мыши создает разрывы (скачки) в повороте. Я пробовал разные факторы, чтобы умножить угол, но я не получил хороших результатов: как только вы достигнете 1 радиан, появляются разрывы.

Во втором пункте, я предполагаю, что это ожидаемое поведение трекбола метода, но в настройках Blender'а вы можете ясно видеть, что он использует метод трекбола для поворота представления.

Я опубликую некоторый код, если мне нужно, но, поскольку он работает, как и ожидалось, до тех пор, пока абсолютное значение угол поворота ниже 1 радиана, я думаю, проблема в том, что Blender использует вариацию трекбола.

1 Ответ

0 голосов
/ 27 января 2020

Во-первых, вращение больше делает его быстрее, чтобы сделать его более плавным, вам нужно нарисовать больше кадров. Простое рисование при 25 градусах, а затем при 65 градусах делает внезапный скачок, но также рисование промежуточных кадров при 35,45 и 55 градусах дает более плавное движение. Частота кадров сцены dr aws at определяет, сколько между кадрами вы можете нарисовать, чтобы перейти от начальной к конечной позиции. Резкое движение означало бы, что ваш основной l oop слишком медленный, вам нужна удобная скорость вращения, соответствующая движению мыши, затем увеличьте частоту кадров, чтобы ваш основной l oop обновлялся достаточно раз, чтобы сделать переход достаточно плавный.

Для двоих, в Blender есть опция в настройках ввода, которая называется Непрерывный захват , вы можете заметить, что курсор заставляет курсор перейти на противоположную сторону окна. Может быть, вы могли бы начать здесь и следить за тем, что он делает. Обратите внимание, что при перетаскивании виджета пользовательского интерфейса для чисел курсор скрывается и возвращается в исходное положение при отпускании.

...