Задача в принципе простая, но не могу решить)
В принципе все просто, у нас есть координаты камеры, по ней спокойно кидаем луч прямо. Допустим нам надо узнать координаты на горизонтальной плоскости, с высотой 0. у нас есть расстояние когда луч будет 0 и тут все сходится.
Как сделать отклонение, центр экрана это 0 градусов, соответственно левый край будет 45( фов=90, половина 45). Берем координаты мышки, перемножаем, получаем угол отклонения. Теперь надо луч из центра провернуть на два угла, отклонение по Х и У. В каком порядке и как правильно это сделать?
У меня вышло вот что:
- Код: Выделить всё
MatrixRotationY Mtrx2, vScr.x
MatrixRotationYawPitchRoll Mtrx3, ugol, ugolH + vScr.z, 0
MatrixMultiply Mtrx2, Mtrx2, Mtrx3
Vec3TransformCoord v, v, Mtrx2
И оно относительно правильно проворачивае, но есть постоянные отклонения, по Х. Около центра по Х в меньшую сторону и на углах в в большую. Начал лепить костыли, которые улучшают значения, но не решают. Вот решил спросить, может я изначально как то все не так сделал и есть легкие решения.