Пробачте, пробачте, але мені потрібна допомога, і я вже кілька тижнів зациклювався на цьому, я не досягаю прогресу, і всюди я йду, і я бачу іншу відповідь, все, що я намагаюся, не працює. У мене було достатньо порад та порад, зараз мені справді потрібен хтось, який дасть мені відповідь, щоб я працював назад, тому що я не можу цього зрозуміти.
Найбільш заплутаною проблемою є те, як кожен користується різним набором конвенцій чи правил, а їх відповіді ґрунтуються на власних конвенціях, не визначаючи, що вони є.
Отже, ось набір конвенцій, які я сформував на основі того, що, як видається, є найпоширенішим та логічним:
- Правило правої руки для осі.
- Позитивний Y вгору, Позитивний Z - до глядача, Позитивний X - праворуч.
- Ряд мажорних матриць, переміщених при надсиланні в шейдери.
- Крок: обертання навколо осі X
- Коса: обертання навколо осі y
- Рулон: обертання навколо осі z
- Порядок обертання: нахил, нахил, нахил (чи правильно це? Чи може хтось перевірити мене на цьому?)
- Позитивні значення обертання, дивлячись вниз від позитивного кінця осі, призводять до обертання за годинниковою стрілкою.
- За замовчуванням напрямок 0 обертання по всій осі є вектором, що вказує вниз на мінус Y.
.. з огляду на ці умовності (яправда виправте мене, якщо вони помиляються!), як це зробити:
- Написати функцію LookAt? (lookAt (векторне положення, векторний фокус, вектор вгору))
- Обчисліть матрицю обертання. (обертання (x, y, z))
Я намагався відповісти на ці два питання щонайменше протягом останніх 3 тижнів, я переписав свою функцію LookAt & Rotation Matrix щонайменше 30 разів, я протестував десятки методів і прочитав матеріал, який я бачив на сотні веб-сайтів і прочитали багато відповідей на запитання, скопіювали код інших людей, і нічого, що я зробив до цього часу, не працювало, все дало неправильний результат. Деякі з яких створили деякі дивно химерні виходи, навіть не близькі до правильного обертання.
Я працював над цим щовечора, за винятком минулої ночі, тому що я настільки засмучувався повторною невдачею, що мені довелося зупинитися і перерватися.
Будь ласка, просто покажіть мені, що таке правильний метод, щоб я міг працювати від цього і зрозуміти, як він працює, я просто не отримую правильної відповіді, і це зводить мене з розуму!
Я пишу на Java, але візьму код, написаний будь-якою мовою, більшість моїх кодів 3D-рендерінгу насправді працює досить блискуче, це лише математика, яку я не можу зрозуміти.
ОНОВЛЕННЯ: РІШЕНО
Дякую за твою допомогу! Зараз у мене є робоча функція LookAt, яку я насправді розумію, і я не міг бути щасливішим (якщо хтось хотів би це побачити всіма силами, запитав).
Я спробував ще раз створити матрицю обертання на основі змінних крок / поступово / нахил, і це, здавалося, не вдалося, але я вирішив скинути спробу використовувати кути ейлера для камери вільного огляду, оскільки, здається, непридатний для Роль, натомість я збираюся створити клас кватерніона, можливо, пощастить спуститись по цьому шляху, інакше я вдадусь до використання кроку / пронизування як сферичних координат і покладусь на нову робочу функцію LookAt для обертання.
Якщо хтось ще стикається з подібною проблемою і хоче задати мені питання, сміливо.
Принаймні я більше не застряг, дякую за допомогу!