12.07.2004, 20:27
Ладно, просто скажу, что хотел вообще придумать алгоритм, который, имея расположение камеры (x,y,z) и точку, куда она должна смотреть, соответственно её повернёт. :unsure:
---------------------
Вот, есть две ссылки неплохие по поводу кватернионов:
http://algolist.manual.ru/graphics/3dfaq...les/77.php
http://itsoyuz.h10.ru/articles/d3d/quat.html
Так вот, там всё довольно подробно объяснено.
Нет не у кого желания попробовать реализовать задумку с камерой (по двум точкам)?
Я вот уже научился немного делать эти кватернионы. Теперь у меня другая проблема, попробую объяснить её суть:
Итак, мы имеет две 3D-точки (x,y,z). Нам нужно сделать так, чтобы камера оказалась в первой точке и смотрела во вторую. Первое, что мне пришло на ум, что нужно задать ось вращения от первой точке ко второй. Эта ось задаётся вектором:
VectorAxis ( x2-x1, y2-y1, z2-z1 )
, где x1,y1,z1 - Первая точка; x2,y2,z2 - Вторая.
Чтобы переделать ось (Axis) + угол (Angle) вращения в кватернион, нужно провести, как мне кажется, известные рассчёты.
Предварительно нужно вектор, который описывает ось сделать единичным - разделить все его компоненты на его же длину. А затем вот:
Как я понял, в ПЗ кватернион записан так: Quaternion {x, y, z, w}
Просто, на сайтах, которые я показал, написано наоборот.
Проблема заключается в том, что если ось вращения будет пересекать обе 3D-точки (наши), то камера никогда не будет смотреть во вторую точку. Решение этой проблемы я нашёл в том, чтобы развернуть ось на 90% и тогда при определённом углу вращения камера должна будет смотреть во вторую точку. Вот только как повернуть ось на 90%????
Может я вообще не в ту степь лезу?
Просто очень хочется с делом этим разобраться.
---------------------
Вот, есть две ссылки неплохие по поводу кватернионов:
http://algolist.manual.ru/graphics/3dfaq...les/77.php
http://itsoyuz.h10.ru/articles/d3d/quat.html
Так вот, там всё довольно подробно объяснено.
Нет не у кого желания попробовать реализовать задумку с камерой (по двум точкам)?
Я вот уже научился немного делать эти кватернионы. Теперь у меня другая проблема, попробую объяснить её суть:
Итак, мы имеет две 3D-точки (x,y,z). Нам нужно сделать так, чтобы камера оказалась в первой точке и смотрела во вторую. Первое, что мне пришло на ум, что нужно задать ось вращения от первой точке ко второй. Эта ось задаётся вектором:
VectorAxis ( x2-x1, y2-y1, z2-z1 )
, где x1,y1,z1 - Первая точка; x2,y2,z2 - Вторая.
Чтобы переделать ось (Axis) + угол (Angle) вращения в кватернион, нужно провести, как мне кажется, известные рассчёты.
Предварительно нужно вектор, который описывает ось сделать единичным - разделить все его компоненты на его же длину. А затем вот:
Код:
w = cos(Angle/2)
x = AxisX * sin(Angle/2)
y = AxisY * sin(Angle/2)
z = AxisZ * sin(Angle/2)
Просто, на сайтах, которые я показал, написано наоборот.
Проблема заключается в том, что если ось вращения будет пересекать обе 3D-точки (наши), то камера никогда не будет смотреть во вторую точку. Решение этой проблемы я нашёл в том, чтобы развернуть ось на 90% и тогда при определённом углу вращения камера должна будет смотреть во вторую точку. Вот только как повернуть ось на 90%????
Может я вообще не в ту степь лезу?

