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

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

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

Как вращать 3D куб OpenGL на Android? - Android

15.04.2016, 14:13. Просмотров 202. Ответов 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 недели мучаюсь с этой задачей. В интернете похожих задач не нашёл.
Зря я в школе геометрию не любил . Или же, если есть способ попроще, скажите, в какую сторону копать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 14:13     Как вращать 3D куб OpenGL на Android?
Посмотрите здесь:

Android OpenGL (Android)
Android OpenGL 1.1 Android
Android OpenGL Как отобразить текст?
Android Ищу уроки по opengl под android
Как интегрировать AdMob в экран OpenGL ES Android? Android
Android Как правильно сверстать в android
Android Как рисовать графики на Android?
Как нарисовать много треугольников в opengl? Android
Как сделать прозрачным фон GLSurfaceView (openGL ES2) Android
Android Как узнать координаты проекции вертексов на экране (Opengl es)?
Android 2.3 поддерживает opengl 2 ? Android
Basic4Android Как перезагрузить устройство android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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