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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Handler http://www.cyberforum.ru/android-dev/thread1675021.html
Всем привет. Делаю урок по книге(Head First). В которой приводися следующий код: package com.example.stopwatch; import android.os.Bundle; import...
Программирование Android Как считать нажатие на одно из полей в ListView? Добрый день, как считать нажатие на одно из полей в listview? вставляю такой код в onCreat, но не выводит log. Что не так? listView1.setOnItemClickListener(new... http://www.cyberforum.ru/android-dev/thread1674957.html
Программирование Android Вложенные фрагменты
Ребятушки, привет. У меня проблема с вложенными фрагментами. Мое приложение построено так: есть одно главное Activity, а также NawigationDrawer, через который я перехожу на разные фрагменты. Все...
Как добавить в каждый item GridView свой gif? Программирование Android
У меня есть url многих картинок, которые сохранены в ArrayList<String> itemList. Но мне нужно в каждый item GridView записалась своя отдельная картинка из этого списка { ImageView...
Программирование Android Как увеличить всю страницу пальцами, вместе с кнопками текстом и изображениями? http://www.cyberforum.ru/android-dev/thread1674641.html
как увеличить всю страницу пальцами, вместе с кнопками текстом и изображениями. что бы все оставалось на своих местах в том месте где изначально было поставлено.
Программирование Android Get - запрос Добрый день. Возникла потребность получить GET-параметры из указанного URL. Так полагаю, здесь нужно window.location запихать? Но если честно, я смутно представляю всю эту систему. Есть у... подробнее

Показать сообщение отдельно
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
04.03.2016, 13:28  [ТС]
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru