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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Простая игра. OpenGL - Программирование Android

09.02.2014, 18:53. Просмотров 1675. Ответов 8
Метки нет (Все метки)

Хочу научиться работать с графикой и... решил начать с игрушки вроде этих:
https://play.google.com/store/apps/details?id=com.baileyz.aquarium
https://play.google.com/store/apps/d...penguinfishing
https://play.google.com/store/apps/d...tainclimbrace2

Что ОБЫЧНО используют для подобных игр? Canvas? OpenGL? Движки?

Матетематика движений должна быть на яве! (с++ пока не научился использовать в андроиде, а движковые языки вроде С# или javascript учить не хочу).

Если чесно, то пока склоняюсь в сторону OpenGL. Есть небольшой опыт с ним в других языках. Поэтому:
1) Кто нибудь вообще использует чистый OpenGL на яве андроида?
2) Можно ли использовать OpenGL картинки НЕ на весь экран (в примерах только на полный встречал), а рядом с обычными кнопками? (да/нет, пример)
3) Можно ли использовать НЕСКОЛЬКО разных OpenGL картинок на одной форме? Например по картинке в каждую закладку или в каждый Layout? В Делфи получалось, но там не андроид...

Добавлено через 1 час 9 минут
Уже выяснил (добился) что 2) и 3) - ВОЗМОЖНО...
Но 1) все еще интересует! Имеет ли смысл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 18:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Простая игра. OpenGL (Программирование Android):

простая анимация - Программирование Android
Добрый вечер! Подскажите пожалуйста как сделать, чтобы при запуске приложения появилась пикча на определенное время зависла бы а потом...

Простая анимация - Программирование Android
Хочу создать окно, желательно не на весь экран (диалоговое) в котором нарисовать простую картинку (кружочки, квадратики, текст). Рисунок 2Д...

Тормозит простая анимация в Android приложении - Программирование Android
Добрый вечер, написал простое приложение в котором имеется 7 кнопок, сделал простую XML анимацию для каждой кнопки что бы при появлении они...

На эмуляторе самая простая программа идет, а на телефон не устанавливается - Программирование Android
На эмуляторе самая простая программа идет, а на телефон не устанавливается. При чем, сначала шла на телефоне. Но потом несколько усложнил...

Простая и бесплатная возможность рисования для приложения под android - Программирование Android
Интересует возможность простой и удобной, а главное бесплатной (на крайний случай и платной программы) возможности, которая позволит...

Простая игра на OpenGL - OpenGL
Пишу простенькую игру на OpenGL. Раньше писал на Blitz3D, но его нельзя использовать, VS 2005, OpenGL и MFC не особо понимаю. Поэтому все...

8
name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
09.02.2014, 23:03 #2
Что ОБЫЧНО используют для подобных игр? Canvas? OpenGL? Движки?
1- двиг или OpenGL
2/3 можно и на канве сделать

1) Кто нибудь вообще использует чистый OpenGL на яве андроида?
хз, вроде как для андроида используется OpenGL ES 1.0/2.0

2/3

Кликните здесь для просмотра всего текста

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
package com.example.opengltest;
 
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
 
public class MainActivity extends Activity {
 
    private GLSurfaceView glView;
    private GL_Renderer renderer;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        renderer = new GL_Renderer(this);
        glView = new GLSurfaceView(this);
        glView.setRenderer(renderer);
        glView.requestFocus();
        
        setContentView(glView);
    }
 
}
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.example.opengltest;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
 
import android.content.Context;
import android.opengl.GLSurfaceView.Renderer;
 
public class GL_Renderer implements Renderer {
    
    private Context context;
    private int zoomX = 800;
    private int zoomY = 480;
    Polygon polygon;
    
    
    public GL_Renderer(Context context){
        this.context = context;
    }
    
    @Override
    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        
        GL_Prepare(gl);
        //Draw Game
 
        polygon.draw(gl, 120, 120, 150, 150);
     
        //End
        GL_Finish(gl);
    }
    
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        
        gl.glOrthof(0, zoomX, zoomY, 0, 0, 1);
        gl.glViewport(0, 0, width, height);
        
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        
    }
 
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        polygon = new Polygon(gl, context, R.drawable.ic_launcher);
       gl.glEnable(GL10.GL_TEXTURE_2D);
       gl.glShadeModel(GL10.GL_SMOOTH);
       gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
       gl.glClearDepthf(1.0f);
       gl.glEnable(GL10.GL_DEPTH_TEST);
       gl.glDepthFunc(GL10.GL_LEQUAL);
    }
    
    private void GL_Prepare(GL10 gl){
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glFrontFace(GL10.GL_CW);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
    }
    
    private void GL_Finish(GL10 gl){
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    }
 
}
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
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
package com.example.opengltest;
 
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
 
import javax.microedition.khronos.opengles.GL10;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
 
public class Polygon {
    private float[] uv1 = new float[2];
    private float[] uv0 = new float[2];
    private FloatBuffer vertexBuffer;
    
    private float vertices[]={
            0.0f, 1.0f, 0.0f, // bottom left
            0.0f, 0.0f, 0.0f, //top left
            1.0f, 0.0f, 0.0f, //top right
            1.0f, 1.0f, 0.0f //bottom right
    };
    private FloatBuffer uvCoordBuffer;
    private float[] uvCoord = {
            uv1[0], uv0[1],
            uv1[0], uv0[0],
            uv1[1], uv0[0],
            uv1[1], uv0[1]
    };
    
    private int[] textures = new int[1];
    private void init(){
        uvCoord[0] = 0.0f; uvCoord[1] = 1.0f;
        uvCoord[2] = 0.0f; uvCoord[3] = 0.0f;
        uvCoord[4] = 1.0f; uvCoord[5] = 0.0f;
        uvCoord[6] = 1.0f; uvCoord[7] = 1.0f;
        
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(vertices.length * 4);
        byteBuffer.order(ByteOrder.nativeOrder());
 
        vertexBuffer = byteBuffer.asFloatBuffer();
        vertexBuffer.put(vertices);
        vertexBuffer.position(0);
 
        byteBuffer = ByteBuffer.allocateDirect(uvCoord.length * 4);
        byteBuffer.order(ByteOrder.nativeOrder());
        uvCoordBuffer = byteBuffer.asFloatBuffer();
        uvCoordBuffer.put(uvCoord);
        uvCoordBuffer.position(0);
    }
    
    public Polygon(GL10 gl, Context c, int id) {
        init();
        LoadFromAsset(gl, c, id);
    }
 
    public void LoadFromAsset(GL10 gl, Context context, int id) {
        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), id);
        gl.glGenTextures(1, textures,0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
        
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        bitmap.recycle();
    }
    
  
    
    private void draw(GL10 gl){
        
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, uvCoordBuffer.position(0));
        gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, vertices.length / 3);
    }
    
    public void draw(GL10 gl, int posX, int posY, int width, int height){
        gl.glLoadIdentity();
        gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
        gl.glTranslatef(posX, posY, 0);
        gl.glScalef(width, height, 0);
        gl.glRotatef(0, 0, 0, 1.0f);
        draw(gl);
    }
    
}
1
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
10.02.2014, 13:30 #3
libgdx - библиотека под андроид и пк. Использует OpenGL и код пишется на java.
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
10.02.2014, 16:18  [ТС] #4
Пока libgdx нравится (читаю о нем), но...

Привык рисовать обьекты сам (схематические) - круги, прямоугольники... И не хочется ПОЛНОСТЬЮ отказываться от этих возможностей. Не хочу использовать ТОЛЬКО готовые картинки. В OpenGL такое использовал, а в libgdx это возможно? Не хочу потратить десяток часов на изучение движка, а потом выяснится что не возможно... Как в нем с 3Д обьектами или только 2Д? Можно ли использовать сменное освещение (подвижный источник вокруг 3Д обьектов)?
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
10.02.2014, 16:29 #5
3д в нем можно забабахать, на счет примитивов и освещения не в курсе, не использовал
0
name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
10.02.2014, 17:13 #6
примитивы можно,а для освещения используют шейдера
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
10.02.2014, 18:04  [ТС] #7
А насколько сильно продумана там физика? Простая гравитация, столкновение-отталкивание, вращение...
В планах было сделать плоскую гоночную машинку. Вроде игры на парковку.

Добавлено через 4 минуты
...когда-то подобную почти сделал на Делфи+OpenGL
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
10.02.2014, 18:28 #8
для физики я подключал Box2D
0
name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 371
Завершенные тесты: 1
10.02.2014, 18:32 #9
для физики там встроили Box2d, вот есть статья
З.Ы. сам не юзал, т.к. использую свои велосипеды)
0
10.02.2014, 18:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2014, 18:32
Привет! Вот еще темы с ответами:

Простая игра 3D на C++ - C++
Здравствуйте! Я бы хотел попробовать написать простенькую 3D игру на C++. Физический движок мне не нужен, так как физики там сложной не...

Простая игра - C++
Скиньте мне в файле ворда какую то простую игру в С++. Пожалуйста:'(

Простая игра - C#
Мне надо написать игру лабиринт, но мои способности что в C#, что в C++ очень малы. вот все на что додумался мой мозг на C# : ...

Простая игра - C++ Builder
Исходя из предыдущей темы, решил писать сам без примера и придумал вот такую штуку. Через определенное время в окне появляется на...


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

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

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