Форум программистов, компьютерный форум, киберфорум
3D моделирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 34
1

Реализовать вращение 3D объекта как вращение камеры

24.05.2015, 13:06. Показов 5996. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Существует некий объект в 3D пространстве (для примера используем куб). В исходном положении это дело выглядит как на рисунке 1 первый куб (ось Z направлена на нас, куб повернут на 45 градусов вокруг оси Z).
Вращение объекта реализуется при помощи задания углов поворота вокруг оси X, Y, Z. То есть при задании, различных углов , объект может выглядеть как 2-4 кубы. Проблема в том, что таким образом управлять вращением в рамках моей задачи невозможно.

Необходимо каким-то образом преобразовывать углы поворота таким образом, чтобы появился эффект использования камеры, и картинка могла принимать лишь только вид, подобный рисунку 2(вертикальные грани (ребра) куба имеют вертикальное положение). Как реализовать такую возможность?
Миниатюры
Реализовать вращение 3D объекта как вращение камеры   Реализовать вращение 3D объекта как вращение камеры  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2015, 13:06
Ответы с готовыми решениями:

Вращение 3D объекта в зависимости от положения камеры
у меня есть класс камеры в котором есть поля вращения по Х и по У. я хочу сделать так, чтобы некий...

Вращение камеры вокруг объекта, или центра с координатами (0, 0, 0)
Помогите написать функцию вращения камеры вокруг объекта, или центра с координатами (0,0,0)

C# OpenGL вращение камеры "мышкой" вокруг трёхмерного объекта
Я в С# новичок и в OpenGL. Какой-то бы целостный пример для вращения мышкой камеры вокруг куба!...

Реализовать линейное перемещение и вращение вокруг какой-либо точки графического объекта
Здравствуйте, пожалуйста помогите с задачкой. Вот её содержание: Реализовать линейное перемещение...

7
2082 / 1573 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
09.06.2015, 21:19 2
матрица LookAt, камеру двигаешь по сфере (точка Eye вычисляется по сферическим координатам по праметрическому уравнению сферы, u - азимут от 0 до 2Pi, v - угол местности (возвышения) от -Pi/2 до Pi/2, r-дистанция до объекта), центр сферы - центр объекта, точка Target - центр объекта.
0
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 34
09.06.2015, 22:01  [ТС] 3
Fulcrum_013, движок я писал сам, никаких LookAt у меня нету.

Проблему решил следующим образом. Вращение происходит в два этапа: в исходном, начальном положении объект поворачивается на нужный угол вокруг оси Z (направлена на нас), затем поворачиваем объект вокруг оси X (направлена горизонтально) на нужный угол. Если нужно еще раз повернуть объект, то возвращаем его в исходное положение, и выполняем процедуру еще раз. Таким образом отбрасываются лишние повороты.
0
2082 / 1573 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
09.06.2015, 22:14 4
Цитата Сообщение от Taras A Посмотреть сообщение
Кстати движок я писал сам, никаких LookAt у меня нету.
Ну вполне возможно что самое время ей появиться. У меня к примеру в самодельном движке кроме LookAt еще и LookTo присутствует. Разница между ними - LookAt - вычисляет видовую матрицу(т.е. со смещением начала отсчета в 0), а LookTo вычисляет матрицу трансформации объекта для установки его в заданной точке пространства с заданной ориентацией оси Z
Цитата Сообщение от Taras A Посмотреть сообщение
Таким образом отбрасываются лишние повороты.
Вобще в исходе ставился вопрос имитации камеры при вращении по всем трем осям, т.е. фактически "полет вокруг объекта"
0
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 34
09.06.2015, 23:21  [ТС] 5
Fulcrum_013, по поводу "полета вокруг объекта", может быть я не совсем понятно описал свой костыль, но работает этот как раз таким образом.

Костыль потому, что несколько дней гугления так и не привели меня к матрицам поворота камеры. Везде идет речь только о вращении самого объекта.
0
2082 / 1573 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
10.06.2015, 03:39 6
Цитата Сообщение от Taras A Посмотреть сообщение
что несколько дней гугления так и не привели меня к матрицам поворота камеры
DirectX SDK. И в Microsoft Platform SDK в разделе OpenGL есть формулы. Так же как и по остальным матрицам используемым в конвейере.

Добавлено через 4 часа 0 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
* -Cross product operator   
/ - Dot product operator
}
function LookAt(Target, Eye, Up: TVector): TMatrix;
var
  XAxis, YAxis, ZAxis: TVector;
begin
  Result.Identity;
  Result.ZAxis := (Target-Eye).Normalized;
  Result.XAxis := (Up*Result.ZAxis).Normalized;
  Result.YAxis := Result.ZAxis * Result.XAxis;
 
  Result.X := -(Eye / Result.XAxis);
  Result.Y := -(Eye / Result.YAxis);
  Result.Z := -(Eye / Result.ZAxis);
 
end;
Добавлено через 2 минуты
Цитата Сообщение от Taras A Посмотреть сообщение
Везде идет речь только о вращении самого объекта.
Движение и вращение - штука относительная. движение/вращение камеры есть движение/вращение мира в обратном направлении в ЛСК камеры.
0
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 34
10.06.2015, 03:59  [ТС] 7
Fulcrum_013, У меня движок написан с нуля, безовсяких директиксов и прочих опенгл. Матницы поворота, масштаба, перемещения и прочий инструментарий создан с чистого листа. Причем тут сдк? Или там есть нужный мне матан?

Движение камеры и вращения объкта по сути одно и тоже. Собственно с этого и начиналась тема.
0
2082 / 1573 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
10.06.2015, 04:14 8
Цитата Сообщение от Taras A Посмотреть сообщение
Или там есть нужный мне матан?
Матана там нет. Только вычислительная геометрия (матрицы поворота к этому разделу математики относятся а не к матану), которая тебе и нужна.

Добавлено через 2 минуты
Цитата Сообщение от Taras A Посмотреть сообщение
Движение камеры и вращения объкта по сути одно и тоже. Собственно с этого и начиналась тема.
Ну да. тот код который привел в принципе можно заменить кучей нахождений обратных матриц и т.д. потому как не совсем одно и тоже, движение/поворот камеры - это набор обратных поворота/движений объекта
0
10.06.2015, 04:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2015, 04:14
Помогаю со студенческими работами здесь

Как сделать свободное вращение камеры вокруг начала координат?
Как сделать свободное вращение камеры вокруг начала координат ?

Вращение камеры
Проект 2D, камера orthographic. Вид сверху на персонажа. Персонаж поворачивается лицом в то...

Вращение камеры
Всем доброго времени суток, подскажите можно ли на изображении(прикрепил) перемещаться при помощи...

Вращение камеры C# direct3d
вобщем написал вот такой вот алгоритм для ротации камеры.. почему такие формулы не спрашивайте.. я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru