Пожалуйста, прости меня, но мне нужна помощь, и я застрял в этом несколько недель, я не делаю успехов, и везде я иду и вижу другой ответ, все, что я пытаюсь, не работает. У меня было достаточно советов и советов, теперь мне действительно нужен кто-то, кто даст мне ответ, чтобы я мог работать задом наперед, потому что я не могу этого понять.
Что делает эту тему наиболее запутанной, так это то, как каждый использует другой набор соглашений или правил, и их ответы основаны на их собственных соглашениях без определения того, что они собой представляют.
Итак, вот набор соглашений, которые я сформировал на основе того, что кажется наиболее распространенным и логичным:
- Правило правой руки для оси.
- Положительный Y вверх, положительный Z направлен на зрителя, положительный X направо.
- Row Major матрицы, транспонированные при отправке в шейдеры.
- Шаг: вращение вокруг оси X
- Yaw: вращение вокруг оси Y
- Roll: вращение вокруг оси z
- Порядок вращения: Roll, Pitch, Yaw (это правильно? Может кто-нибудь проверить меня?)
- Положительные значения вращения, если смотреть вниз от положительного конца оси, приводят к вращению по часовой стрелке.
- Направление по умолчанию для поворота 0 по всей оси - это вектор, направленный вниз к отрицательному Y.
.. учитывая эти условности (во что бы то ни стало исправьте меня, если они ошибаются!), как это сделать:
- Написать функцию LookAt? (lookAt (векторное положение, векторный фокус, вектор вверх))
- Рассчитать матрицу вращения. (вращение (x, y, z))
Я попытался ответить на эти два вопроса сам, по крайней мере, за последние 3 недели, я переписал свою функцию LookAt & Rotation Matrix по крайней мере 30 раз, я протестировал десятки методов и прочитал материал, который видел на сотни веб-сайтов и читали многие ответы на вопросы, копировали чужой код, и ничего из того, что я сделал до сих пор, не сработало, все дало неправильный результат. Некоторые из которых производили некоторые забавно причудливые результаты, даже не близкие к правильному вращению.
Я работал над этим каждую ночь, за исключением прошлой ночи, потому что я был настолько расстроен повторяющимся провалом, что мне пришлось остановиться и сделать перерыв.
Пожалуйста, просто покажите мне, каков правильный метод, чтобы я мог работать в обратном направлении и выяснить, как он работает, я просто не получаю правильный ответ, и это сводит меня с ума!
Я пишу на Java, но я возьму код, написанный на любом языке, большая часть моего кода 3D-рендеринга на самом деле работает блестяще, это просто математика, которую я не могу понять.
ОБНОВЛЕНИЕ: решено
Спасибо за помощь! Теперь у меня есть работающая функция LookAt, которую я на самом деле понимаю, и я не могу быть счастливее (если кто-то захочет увидеть ее, обязательно спросите).
Я попытался еще раз создать матрицу вращения, основанную на переменных pitch / yaw / roll, и она снова, похоже, потерпела неудачу, но я решил отказаться от попыток использовать углы Эйлера для камеры freelook, так как она кажется неподходящей для Вместо того, чтобы использовать роль, вместо этого я собираюсь создать класс кватернионов, возможно, будет более удачным идти по этому пути, в противном случае я прибегну к использованию шага / рыскания в качестве сферических координат и буду полагаться на новую рабочую функцию LookAt для вращения.
Если кто-то еще сталкивается с подобной проблемой и хочет задать мне вопросы, не стесняйтесь.
По крайней мере, я больше не застреваю, спасибо за помощь!
float[16]
.