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

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

Войти
Регистрация
Восстановить пароль
 
aydarhub
2 / 2 / 0
Регистрация: 31.01.2016
Сообщений: 26
#1

Как вращать 3D куб OpenGL на Android? - Программирование Android

15.04.2016, 14:13. Просмотров 299. Ответов 0

Привет всем
Есть куб:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
float[] vertices = {
 
                // ось X
                -3f, 0, 0,
                3f, 0, 0,
 
                // ось Y
                0, -3f, 0,
                0, 3f, 0,
 
                // ось Z
                0, 0, -3f,
                0, 0, 3f,
 
                //coub
                ///front green
                -0.5f, -0.5f, 0.5f,
                -0.5f, 0.5f, 0.5f,
                0.5f, -0.5f, 0.5f,
                0.5f, 0.5f, 0.5f,
 
                ///back blue
                -0.5f, -0.5f, -0.5f,
                -0.5f, 0.5f, -0.5f,
                0.5f, -0.5f, -0.5f,
                0.5f, 0.5f, -0.5f,
 
                ///right white
                0.5f, -0.5f, 0.5f,
                0.5f, 0.5f, 0.5f,
                0.5f, -0.5f, -0.5f,
                0.5f, 0.5f, -0.5f,
 
                ///left yellow
                -0.5f, -0.5f, 0.5f,
                -0.5f, 0.5f, 0.5f,
                -0.5f, -0.5f, -0.5f,
                -0.5f, 0.5f, -0.5f,
 
                ///top-red
                -0.5f, 0.5f, 0.5f,
                -0.5f, 0.5f, -0.5f,
                0.5f, 0.5f, 0.5f,
                0.5f, 0.5f, -0.5f,
 
                //bottom purple
                -0.5f, -0.5f, 0.5f,
                -0.5f, -0.5f, -0.5f,
                0.5f, -0.5f, 0.5f,
                0.5f, -0.5f, -0.5f,
        };
Хочу вращать его пальцем. Попробовал вращать сам куб так:
Java
1
2
Matrix.rotateM(mViewMatrix, 0, angleY, 1, 0, 0);
Matrix.rotateM(mViewMatrix, 0, angleX, 0, 1, 0);
но при повороте на одной оси, другая ось уже крутится не в нужную сторону.
Есть идея сделать перемещение камеры, а не вращение самого куба, но смог реализовать поворот только по одной стороне:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void createViewMatrix() {
        //точка положения камеры
        eyeX = (float) (Math.cos(angleX) * 4f);
        eyeY = 0;
        eyeZ = (float) (Math.sin(angleX) * 4f);
 
        //точка направления камеры
        centerX = 0;
        centerY = 0;
        centerZ = 0;
 
        //up-вектор
        upX = 0;
        upY = 1;
        upZ = 0;
 
        Matrix.setLookAtM(mViewMatrix, 0, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
Если написать так:
Java
1
2
3
eyeX = (float) (Math.cos(angleX) * 4f);
eyeY = (float) (Math.cos(angleY) * 4f);
 eyeZ = (float) (Math.sin(angleX) * 4f);
то вверх-вниз камера вращается только на 45 градусов и отдаляется от куба.
angleY - это движение пальца по Y,
angleX - это движение пальца по X:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: // нажатие
                downX = event.getX();
                downY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE: // движение
                angleX = event.getX() - downX;
                angleY = event.getY() - downY;
                downX = event.getX();
                downY = event.getY();
                cube.rotate(angleX / 10, angleY / 10);
                break;
            case MotionEvent.ACTION_UP: // отпускание
                cube.setXY();
Подскажите, пожалуйста, формулу, чтобы вверх-вниз тоже вращалось. 2 недели мучаюсь с этой задачей. В интернете похожих задач не нашёл.
Зря я в школе геометрию не любил . Или же, если есть способ попроще, скажите, в какую сторону копать.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 14:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вращать 3D куб OpenGL на Android? (Программирование Android):

Как интегрировать AdMob в экран OpenGL ES Android? - Программирование Android
Помогите, пожалуйста. Как сделать показ объявлений AdMob в приложении на OpenGL ES?

OpenGL на Android 4.4 и Android 5.0 - нет текстур - Программирование Android
Всем доброго дня. Пишу 2D игру с использование OpneGL. На устройстве с версией Android 4.4.2 (HTC 626) все текстуры на месте, все...

Android OpenGL 1.1 - Программирование Android
Пытаюсь вот так нарисовать треугольник,но ничего не получается.В чём дело.смотрел несколько примеров,вроде всё идентично. package...

OpenGL (Android) - Программирование Android
Гугля данную тематику нашел цикл уроков по работе с OpenGL: http://*******/qHG0i Начал изучать и пробовать писать что-то свое. После...

Android 2.3 поддерживает opengl 2 ? - Программирование Android
зависит ли это от версии андроида?

Ищу уроки по opengl под android - Программирование Android
Здравствуйте! С друзьями хотим написать игру под android, 2d аркаду (с интересным сюжетом на наш взгляд). Сторонний движок решили не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2016, 14:13
Привет! Вот еще темы с ответами:

Как сделать кликабельным куб в игре для Android - Unity, Unity3D
Есть кубик, а точнее, его 2d версия - квадратик. Нужно, чтобы при нажатии квадрат менял цвет или число на нем меняло цвет. Как сделать,...

Куб в OpenGL - OpenGL
Добрый день! Нарисовала куб, наложила текстуру, кручу. И вот когда он крутится получается, что грани не перекрывают друг друга, а делаются...

Куб OpenGL - Delphi
Помогите пожалуйста нужно дописать часть кода так, что бы куб был закрытый(дописать одну сторону) Вот код нарисования 5 сторон ...

Вращать сферу вокруг центра координат, и одновременно вращать ее вокруг своей оси - OpenGL
Всем привет! Долблюсь о стену второй день ( Суть в том, что мне необходимо вращать сферу вокруг центра координат и одновременно...


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

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

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