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

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

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

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

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

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

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

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

7
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
09.06.2015, 21:19
матрица 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  [ТС]
Fulcrum_013, движок я писал сам, никаких LookAt у меня нету.

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

Костыль потому, что несколько дней гугления так и не привели меня к матрицам поворота камеры. Везде идет речь только о вращении самого объекта.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
10.06.2015, 03:39
Цитата Сообщение от 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  [ТС]
Fulcrum_013, У меня движок написан с нуля, безовсяких директиксов и прочих опенгл. Матницы поворота, масштаба, перемещения и прочий инструментарий создан с чистого листа. Причем тут сдк? Или там есть нужный мне матан?

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

Добавлено через 2 минуты
Цитата Сообщение от Taras A Посмотреть сообщение
Движение камеры и вращения объкта по сути одно и тоже. Собственно с этого и начиналась тема.
Ну да. тот код который привел в принципе можно заменить кучей нахождений обратных матриц и т.д. потому как не совсем одно и тоже, движение/поворот камеры - это набор обратных поворота/движений объекта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2015, 04:14
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru