Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
#1

Поворот объекта относительно заданной точки OpenGL ES 2.0

02.03.2016, 04:19. Просмотров 581. Ответов 5
Метки нет (Все метки)

Здравствуйте! У меня есть прямоугольник 100 на 50, который я хочу повернуть относительно точки, к примеру, (20, 10), но у меня никак не выходит. Лучшее, чего я смог добиться - поворот по левому верхнему углу:
Java
1
2
3
Matrix.multiplyMM(rotationMatrix, 0, projectionMatrix, 0, viewMatrix, 0);
Matrix.translateM(rotationMatrix, 0, myPosX, myPosY, 0);
Matrix.rotateM(rotationMatrix, 0, angle, 0, 0, 1.0f);
Как можно вращать объект относительно некоторой точки? Заранее благодарю, все обыскал, ничего не выходит!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2016, 04:19
Ответы с готовыми решениями:

OpenGl ES 2.0. Некорректный поворот объекта
Здравствуйте! Пытаюсь применять матрицы транформации к отрисовке объекта, но...

Нахождение ближайшего адреса(номер дома) относительно точки
Использую yandex map kit 3.0.. Подскажите, как получить ближайший адрес...

Поворот объекта относительно заданной точки на заданный угол, а затем - отражение относительно заданной прямой
напишите программу,которая осуществляет поворот объекта относительно заданной...

Поворот объекта относительно заданной точки на заданный угол
напишите программу,которая осуществляет поворот объекта относительно заданной...

Напишите программу, которая осуществляет поворот объекта относительно заданной точки на заданный угол
напишите программу,которая осуществляет поворот объекта относительно заданной...

5
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
03.03.2016, 22:48  [ТС] #2
неужели никто не знает?
0
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 454
04.03.2016, 08:01 #3
Тебе нужно на какой-нибудь специальный форум по гейм деву или по OpenGL. Тут люди в большинстве своём в сдк андроида шарят.
0
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
04.03.2016, 08:58  [ТС] #4
DemD10, эхх, попытка не пытка когда найду решение - напишу подробно сюда
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 736
04.03.2016, 09:15 #5
Цитата Сообщение от SlowAR Посмотреть сообщение
У меня есть прямоугольник 100 на 50, который я хочу повернуть относительно точки, к примеру, (20, 10),
тут ответа даже на другом форуме не будет, поскольку ты не пишешь где находится прямоугольник, какие координаты полигонов
0
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
04.03.2016, 13:28  [ТС] #6
Valakin, я хотел узнать в общем как делать, но я только что решил эту проблему, у меня была ошибка в формуле расчета смещения. через 2,5 часа доберусь до компа с инетом и распишу

Добавлено через 3 часа 46 минут
Вот как я сделал:
Java
1
2
3
4
5
6
7
8
9
10
11
float angleCos = (float)(Math.cos(angle*Math.PI/180) * radius);   //1
float angleSin = (float)(Math.sin(angle*Math.PI/180) * radius)
float offsetX = angleCos + angleSin;
float offsetY = angleSin - angleCos;
 
Matrix.multiplyMM(rotationMatrix, 0, projectionMatrix, 0, viewMatrix, 0);
 
Matrix.translateM(rotationMatrix, 0, posX, posY, 0);   //2
Matrix.translateM(rotationMatrix, 0, -offsetX, -offsetY, 0);
 
Matrix.rotateM(rotationMatrix, 0, angle, 0, 0, 1.0f);  //3
Вращение объекта вокруг некой точки осуществляется путем смещения его левого верхнего угла на определенное значение, вычисляемое при помощи угла поворота. Это нужно для того, чтобы нужная нам точка вращения находилась на одном месте. Смещение по оси Х и по оси У рассчитывается в пункте 1. Здесь angle - мой некий угол поворота в градусах, который переводится в радианы angle*Math.PI/180 (т.к. функции sin и cos принимают углы в радианах), переменная radius - это расстояние от левого верхнего угла объекта до моей точки, вокруг которой надо вращать. Вычисляется по формуле:
Java
1
radius = (float) Math.sqrt(Math.pow(pointX, 2) + Math.pow(pointY, 2));
, где pointX и pointY - расстояния от левого верхнего угла объекта до вашей точки по оси Х и У.
В результате в переменных offsetX и offsetY будут наши смещения для для левого верхнего угла объекта для текущего угла.

В пункте 2 я перемещаю свой объект в какую-то точку posX и posY и затем смещаю его на полученные значения.

В пункте 3 я поворачиваю на тот же самый угол angle свой объект. После передаю rotationMatrix на отрисовку.
Теперь левый верхний угол объекта будет перемещаться по линии окружности на расстоянии radius от нашей точки вращения.

Старался объяснить максимально подробно. Если будут вопросы - постараюсь ответить
0
04.03.2016, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2016, 13:28

Поворот отрезка на произвольный угол относительно заданной точки
Доброго всем времени суток. Не как не получается найти метод для поворота...

Такая проблема: осуществляю поворот относительно заданной точки на заданный(Button 5)
Фигура деформируется и вращается вокруг исходной фигуры,а должна вращаться...

Поворот объекта относительно другого объекта 2D
Делаю игру с видом сверху и нужно чтобы стрела от лучника вылетала перьями...


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

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

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