Форум программистов, компьютерный форум, киберфорум
Наши страницы
3D моделирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Taras A
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 33
1

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

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

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

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

Вращение сферы в 3D
Всем привет!:) Не знала в какой конкретно раздел обратиться, потому если...

Вращение тела по окружности
Подскажите, пожалуйста, как можно в 3d max сделать анимацию вращения сферы по...

Использовать логическй модификатор defence через вращение. Blender 3D. Резец
Помогите кто знает, делаю механизм, нужно использовать этот логический...

Баг Cinema 4D: перемещение камеры вместо объекта
Не знаю с чем связано, но вот проблема: aw9NoQeqeyM Не работает...

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

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

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

Костыль потому, что несколько дней гугления так и не привели меня к матрицам поворота камеры. Везде идет речь только о вращении самого объекта.
0
Fulcrum_013
1541 / 1187 / 138
Регистрация: 14.12.2014
Сообщений: 10,106
Завершенные тесты: 3
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
Taras A
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 33
10.06.2015, 03:59  [ТС] 7
Fulcrum_013, У меня движок написан с нуля, безовсяких директиксов и прочих опенгл. Матницы поворота, масштаба, перемещения и прочий инструментарий создан с чистого листа. Причем тут сдк? Или там есть нужный мне матан?

Движение камеры и вращения объкта по сути одно и тоже. Собственно с этого и начиналась тема.
0
Fulcrum_013
1541 / 1187 / 138
Регистрация: 14.12.2014
Сообщений: 10,106
Завершенные тесты: 3
10.06.2015, 04:14 8
Цитата Сообщение от Taras A Посмотреть сообщение
Или там есть нужный мне матан?
Матана там нет. Только вычислительная геометрия (матрицы поворота к этому разделу математики относятся а не к матану), которая тебе и нужна.

Добавлено через 2 минуты
Цитата Сообщение от Taras A Посмотреть сообщение
Движение камеры и вращения объкта по сути одно и тоже. Собственно с этого и начиналась тема.
Ну да. тот код который привел в принципе можно заменить кучей нахождений обратных матриц и т.д. потому как не совсем одно и тоже, движение/поворот камеры - это набор обратных поворота/движений объекта
0
10.06.2015, 04:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2015, 04:14

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru