Форум программистов, компьютерный форум, киберфорум
Наши страницы
Тамика
Войти
Регистрация
Восстановить пароль
Оценить эту запись

OpenGL и два квадратика

Запись от Тамика размещена 10.09.2015 в 18:18

Начала изучение OpenGL под андроид. Пока начала с азов... Вдруг на форуме есть специалисты - просьба корректировать, критиковать и направлять.
Первые программы были сосвем скучные. Да и эта не отличается особой сложностью. Но я ведь учусь... Так что жду советы.

C++
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package com.example.myapp;
 
import android.app.Activity;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
 
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
 
 
public class OpenGLStudy extends Activity {
 
 
    private class MyRenderer implements GLSurfaceView.Renderer {
 
        private int mWidth;
        private int mHeight;
        private long timeCurrent;
        private long accumTime;
        private int resultWYellow;
        private int resultHYellow;
        private int resultWRed;
        private int resultHRed;
 
        float calculateWH(long time, long maxTime, int minV, int maxV)
        {
            return minV + (float)time/maxTime * (maxV - minV);
        }
 
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            GLES20.glEnable(GLES20.GL_SCISSOR_TEST);
            timeCurrent = System.currentTimeMillis();
            accumTime = 0;
        }
 
        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            mWidth = width;
            mHeight = height;
 
 
        }
 
        @Override
        public void onDrawFrame(GL10 gl) {
 
            GLES20.glScissor(0, 0, mWidth, mHeight);
            GLES20.glClearColor(0.0f, 0.f, 0.f, 1.f);
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
 
            long delta = System.currentTimeMillis() - timeCurrent;
            accumTime += delta;
            timeCurrent = System.currentTimeMillis();
 
            if (accumTime >= 6000)
                accumTime = 0;
 
            if (accumTime > 3000 && accumTime <= 6000)
            {
                resultWYellow = (int) calculateWH(accumTime - 3000, 3000, mWidth - mWidth / 10, 0);
                resultHYellow = (int) calculateWH(accumTime - 3000, 3000, 0, mHeight - mWidth / 10);
            }
            else if (accumTime <= 3000){
                resultWYellow = (int) calculateWH(accumTime, 3000, 0, mWidth - mWidth / 10);
                resultHYellow = (int) calculateWH(accumTime, 3000, mHeight - mWidth / 10, 0);
            }
 
 
            GLES20.glScissor(resultWYellow, resultHYellow, mWidth / 10, mWidth / 10);
            GLES20.glClearColor(1.0f, 1.f, 0.f, 1.f);
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
 
            if (accumTime > 3000 && accumTime <= 6000)
            {
                resultWRed = (int) calculateWH(accumTime - 3000, 3000, 0, mWidth - mWidth/10);
                resultHRed = (int) calculateWH(accumTime - 3000, 3000, 0, mHeight - mWidth / 10);
            }
            else if (accumTime <= 3000){
                resultWRed = (int) calculateWH(accumTime, 3000, mWidth - mWidth/10, 0);
                resultHRed = (int) calculateWH(accumTime, 3000, mHeight - mWidth / 10, 0);
            }
 
            GLES20.glScissor(resultWRed, resultHRed, mWidth/10, mWidth/10);
            GLES20.glClearColor(1.f, 0.f, 0.f, 1.f);
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
 
 
        }
    }
 
    private GLSurfaceView glSurfaceView;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        glSurfaceView = new GLSurfaceView(this);
        glSurfaceView.setEGLContextClientVersion(2);
        glSurfaceView.setRenderer(new MyRenderer());
 
        setContentView(glSurfaceView);
    }
 
    @Override
    public void onResume()
    {
        super.onResume();
        glSurfaceView.onResume();
    }
 
    @Override
    public void onPause()
    {
        super.onPause();
        glSurfaceView.onPause();
    }
}
Такие вот дела...
Размещено в Без категории
Просмотров 299 Комментарии 4
Всего комментариев 4
Комментарии
  1. Старый комментарий
    Аватар для snake32
    А что получилось? 3 прямоугольника на экране?
    ЗЫ: Самому хочется попробовать GL on Android да яву плохо знаю и средами не владею =(
    Запись от snake32 размещена 29.09.2015 в 15:22 snake32 вне форума
  2. Старый комментарий
    Цитата:
    А что получилось? 3 прямоугольника на экране?
    Э... В названии темы указано, что получилось.


    Цитата:
    ЗЫ: Самому хочется попробовать GL on Android да яву плохо знаю и средами не владею =(
    Это довольно просто. Тем более, что ведроид предоставил неплохую штуку - GLSurfaceView. Больше не нужно руками создавать контекст. Создаёте вьюху и рисуете.
    Может для винды уже и есть нечто подобное, но помню долго мучилась с этим...
    Запись от Тамика размещена 29.09.2015 в 16:19 Тамика вне форума
  3. Старый комментарий
    Аватар для snake32
    Цитата:
    Э... В названии темы указано, что получилось.
    У меня графическая информация лучше воспринимается, чем текстовая
    Цитата:
    Это довольно просто.
    Все вы так говорите...
    А какую среду используете?
    Запись от snake32 размещена 29.09.2015 в 17:26 snake32 вне форума
  4. Старый комментарий
    Цитата:
    У меня графическая информация лучше воспринимается, чем текстовая
    Выложить демку?)
    Просто квадратики движутся... Нужно видео выкладывать. Ну да пофиг. Сегодня выложу.

    Цитата:
    А какую среду используете?
    https://www.jetbrains.com/idea/

    Цитата:
    Все вы так говорите...
    Я могу не только сказать, но еще и помочь с освоением. Хотя бы до того уровня, до которого сама дошла. Так что пяти минут нам вполне хватит
    Запись от Тамика размещена 30.09.2015 в 09:19 Тамика вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru