Все, что вам нужно, это вызвать событие onchange
для input
, поскольку ASP.NET добавляет код обратной передачи в атрибут onchange
. Самый простой способ - вызвать onchange
вручную
var outputData = document.getElementById("CameraScannerTextbox1");
outputData.value = barcode.Value;
outputData.onchange();
. Более продвинутые методы моделирования onchange
см. В , и , в ответ.
Создайте матрицу аккумулятора и инициализируйте ее с идентификационными данными.
Каждый кадр, примените это к своему modelview/world матричному состоянию прежде, чем потянуть объект.
На движение мыши, создайте матрицу вращения об оси X с некоторым sensitivity_constant * delta_x. Создайте другую матрицу вращения об оси Y для другого компонента. Умножьтесь один, затем другой на аккумулятор.
аккумулятор изменится, поскольку Вы перемещаете мышь. При рисовании это ориентирует объект, как Вы ожидаете.
кроме того, человек, говорящий о кватернионах, прав; это будет выглядеть хорошим только для небольших возрастающих изменений. При перетаскивании его быстро на диагонали это не повернет вполне способ, которым Вы ожидаете.
Это является, вероятно, самым интуитивным для вращения объекта вокруг перпендикуляра оси к текущему направлению перетаскивания, или инкрементно с каждым движением мыши, или относительно перетаскивания запускают положение. Эти две опции дают немного отличающееся взаимодействие с пользователем, которое у каждого есть их плюсы и минусы.
существует относительно просты способ преобразовать угол и 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.
В моем курсе Компьютерной графики нам дали следующий код, который позволил нам не изобретать велосипед.
Можно иметь дело с потерей точности путем перенормализации матрицы вращения, таким образом, каждая из этих 3 строк перпендикулярна снова. Или можно повторно создать матрицу вращения, которую Вы собираетесь изменить на основе существующей информации об объекте, и это устраняет потребность в перенормировке.
, Кроме того, можно использовать кватернионы , который является альтернативой Euler углам для контакта с вращениями.
я изучил большую часть этого в мои первые годы от эти часто задаваемые вопросы , который имеет дело с этой проблемой (хотя для другого приложения) в , Euler's Злой .