Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
#1

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

02.03.2016, 04:19. Просмотров 314. Ответов 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);
Как можно вращать объект относительно некоторой точки? Заранее благодарю, все обыскал, ничего не выходит!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2016, 04:19     Поворот объекта относительно заданной точки OpenGL ES 2.0
Посмотрите здесь:

Поворот Экрана Android
Поворот Bitmap изображения Android
Android Поворот ViewPager
Кнопки с картинкой и поворот экрана Android
поворот изображения мультитачем Android
Поворот изображения (GPS) Android
Поворот imageView на заданный угол Android
Android Как отследить поворот экрана
OpenGl ES 2.0. Некорректный поворот объекта Android
Android Google Maps - навигация от точки до точки
AsynkLoader и поворот активити Android
Android Запретить поворот экрана

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
03.03.2016, 22:48  [ТС]     Поворот объекта относительно заданной точки OpenGL ES 2.0 #2
неужели никто не знает?
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 433
04.03.2016, 08:01     Поворот объекта относительно заданной точки OpenGL ES 2.0 #3
Тебе нужно на какой-нибудь специальный форум по гейм деву или по OpenGL. Тут люди в большинстве своём в сдк андроида шарят.
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
04.03.2016, 08:58  [ТС]     Поворот объекта относительно заданной точки OpenGL ES 2.0 #4
DemD10, эхх, попытка не пытка когда найду решение - напишу подробно сюда
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
04.03.2016, 09:15     Поворот объекта относительно заданной точки OpenGL ES 2.0 #5
Цитата Сообщение от SlowAR Посмотреть сообщение
У меня есть прямоугольник 100 на 50, который я хочу повернуть относительно точки, к примеру, (20, 10),
тут ответа даже на другом форуме не будет, поскольку ты не пишешь где находится прямоугольник, какие координаты полигонов
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
04.03.2016, 13:28  [ТС]     Поворот объекта относительно заданной точки OpenGL ES 2.0 #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 от нашей точки вращения.

Старался объяснить максимально подробно. Если будут вопросы - постараюсь ответить
Yandex
Объявления
04.03.2016, 13:28     Поворот объекта относительно заданной точки OpenGL ES 2.0
Ответ Создать тему
Опции темы

Текущее время: 05:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru