Лучший способ перевести мышь перетаскивает движение в 3-е вращение объекта

Все, что вам нужно, это вызвать событие onchange для input, поскольку ASP.NET добавляет код обратной передачи в атрибут onchange. Самый простой способ - вызвать onchange вручную

var outputData = document.getElementById("CameraScannerTextbox1");
outputData.value = barcode.Value;
outputData.onchange();

. Более продвинутые методы моделирования onchange см. В , и , в ответ.

15
задан 20 September 2008 в 06:40
поделиться

4 ответа

Создайте матрицу аккумулятора и инициализируйте ее с идентификационными данными.

Каждый кадр, примените это к своему modelview/world матричному состоянию прежде, чем потянуть объект.

На движение мыши, создайте матрицу вращения об оси X с некоторым sensitivity_constant * delta_x. Создайте другую матрицу вращения об оси Y для другого компонента. Умножьтесь один, затем другой на аккумулятор.

аккумулятор изменится, поскольку Вы перемещаете мышь. При рисовании это ориентирует объект, как Вы ожидаете.

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

4
ответ дан 1 December 2019 в 03:53
поделиться

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

существует относительно просты способ преобразовать угол и 3-й вектор, представляющий ось, поворачиваемую вокруг в матрицу вращения.

Вы правы в том обновлении необработанной матрицы вращения посредством возрастающих вращений, приведет к матрице, больше не являющейся чистой матрицей вращения. Это вызвано тем, что 3x3 матрица вращения имеет в три раза больше данных, чем необходимый для представления вращения.

А более компактный способ представить вращения с Euler Углы , имея минимальные 3 вектора значения. Вы могли взять текущее вращение в качестве Euler углового вектора, преобразовать его в матрицу, применить вращение (возрастающий или иначе) и преобразовать матрицу назад в Euler угловой вектор. Тот последний шаг естественно устранил бы любой невращательный компонент к Вашей матрице, так, чтобы Вы еще раз закончили с чистой вращательной матрицей для следующего состояния.

Euler углы концептуально хороши, однако это - большая работа, чтобы сделать назад и вперед преобразования.

А более практический выбор Кватернионы ( также ), которые являются четырьмя векторами элемента. Эти четыре элемента указывают вращение и универсальный масштаб, и это происходит, что, если Вы входите и нормализуете вектор к единичной длине, Вы получите масштабный коэффициент 1,0. Оказывается, что значение угловой оси может также быть преобразовано в значение кватерниона очень легко [1 110]

q.x = sin(0.5*angle) * axis.x;
q.y = sin(0.5*angle) * axis.y;
q.z = sin(0.5*angle) * axis.z;
q.w = cos(0.5*angle);

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

Преобразование кватерниона к матрице вращения очень просто (использует только умножение и дополнение), когда Вы хотите отобразить модель в ее повернутом состоянии с помощью традиционного графического API.

7
ответ дан 1 December 2019 в 03:53
поделиться

В моем курсе Компьютерной графики нам дали следующий код, который позволил нам не изобретать велосипед.

trackball.h

trackball.c

5
ответ дан 1 December 2019 в 03:53
поделиться

Можно иметь дело с потерей точности путем перенормализации матрицы вращения, таким образом, каждая из этих 3 строк перпендикулярна снова. Или можно повторно создать матрицу вращения, которую Вы собираетесь изменить на основе существующей информации об объекте, и это устраняет потребность в перенормировке.

, Кроме того, можно использовать кватернионы , который является альтернативой Euler углам для контакта с вращениями.

я изучил большую часть этого в мои первые годы от эти часто задаваемые вопросы , который имеет дело с этой проблемой (хотя для другого приложения) в , Euler's Злой .

3
ответ дан 1 December 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: