Почему моя камера FPS катится? Использование эйлеровых углов (не кватернионов) Реализация в Python

Chrome обычно обрабатывает это через пользовательские настройки. (через chrome://settings/searchEngines)

Однако, если вы хотите реализовать это специально для своих пользователей, вам нужно добавить OSD (Open Search Description) на ваш сайт.

Использование функции OmniBox [TAB] Google Chrome для / на личном веб-сайте?

Затем вы добавляете этот XML-файл в корень вашего сайта и ссылаетесь на него в своем :


Теперь посетители вашей страницы автоматически добавят информацию о вашем сайте в внутренние настройки Chrome в chrome://settings/searchEngines.

OpenSearchDescription XML Format Example


Your website name (shorter = better)

Description about your website search here

UTF-8
your site favicon


Важной частью является элемент . {searchTerms} будет заменен на то, что пользователь ищет в omnibar.

Вот ссылка на OpenSearch для получения дополнительной информации.

1
задан gmagno 26 February 2019 в 13:05
поделиться

1 ответ

Абстрактно, ваша проблема в том, что вращения, вызванные тангажом и рысканием, не являются замкнутыми в композиции.

Более конкретно: представьте себе, что вы управляете камерой от первого лица. Посмотрите вниз, затем поверните налево и направо. Ваш взгляд будет двигаться совсем иначе, чем если бы вы поворачивались, глядя прямо перед собой. Однако ваши расчеты ведут себя так, как будто камера будет вести себя одинаково.

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

Так что быстрым решением этой проблемы было бы написать view = yrot @ view @ xrot. Таким образом, все ваши y-повороты заканчиваются слева от ваших x-поворотов, и все будет хорошо. Ну, по крайней мере, какое-то время, но тогда ваша матрица представления может в конечном итоге накапливать ошибки округления, и представление может стать свернутым или искаженным или хуже.

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

0
ответ дан Magma 26 February 2019 в 13:05
поделиться
Другие вопросы по тегам:

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