Получите желаемое значение после 3D броска кубика без замены текстуры лица - PullRequest
0 голосов
/ 24 октября 2018

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

В сцене / мире (используя threejs с cannonjs) У меня есть самолет и один кубик, который я кидаю на самолет (скриншоты здесь перед броском http://prntscr.com/l9rat5, результат http://prntscr.com/l9rdeb). Все работает нормально, пока я не хочу бросить какое-то конкретное значение нанапример, умрите как 1.

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

У меня есть следующие вопросы:

Возможно ли это вообще сделать? Может быть, когда я изменю предварительный бросок кватерниона, это всегда приведет к другому окончательному кватерниону, который я не могу определить?нельзя ли делать с кватернионами какие-либо подсказки?

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

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

Если не ясно, что я имею в виду, дайте мне знать, пожалуйста.

Большое спасибо m

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Для заметки, я решил это, повернув только геометрию (не сетку) в три раза и вообще не касаясь кватерниона тела.

0 голосов
/ 27 октября 2018

Прежде всего, убедитесь, что вы используете симуляцию с фиксированным шагом.Вы делаете это, передавая 3 аргумента в world.step () вместо одного.Это гарантирует, что ваша симуляция будет вести себя одинаково каждый раз, независимо от частоты кадров.

Также убедитесь, что ваше начальное положение, скорость и сила кубика одинаковы при каждом броске.

Если вы строите кватернион, используя встроенные функции пушек, такие как .setFromAxisAngle (), все должно быть хорошо ... Используйте .setFromAxisAngle () с углами в 90 градусов вокруг разных осей.Зачем использовать инверсию кватерниона?

Если вы хотите альтернативный способ вращения матрицы, поместите сетку под пустой родительской сеткой в ​​вашей сцене.Во время симуляции скопируйте вывод cannon.js в родительскую сетку.Затем поверните дочернюю матрицу, чтобы получить желаемое начальное (и конечное) вращение.

...