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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 74, средняя оценка - 4.86
Osanve
2 / 2 / 1
Регистрация: 03.08.2008
Сообщений: 12
#1

OpenGL (Android) - Программирование Android

23.04.2011, 20:37. Просмотров 9113. Ответов 2
Метки нет (Все метки)

Гугля данную тематику нашел цикл уроков по работе с OpenGL: http://*******/qHG0i
Начал изучать и пробовать писать что-то свое.
После изучения второго урока решил реализовать вывод на экран невыпуклового шестиугольника. При запуске на эмуляторе выдается ошибка:
The application MyOpenGLTest (process ru.osanve.myopengltest) has stopped unexpectedly. Please try again.
Run.java:
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
package ru.osanve.myopengltest;
 
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
 
public class Run extends Activity
{
    private GLSurfaceView glSurface;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        glSurface = new GLSurfaceView(this);
        glSurface.setRenderer(new MyOpenGLTest());
        setContentView(glSurface);
    }
    
    @Override
    protected void onResume()
    {
        super.onResume();
        glSurface.onResume();
    }
    
    @Override
    protected void onPause()
    {
        super.onPause();
        glSurface.onPause();
    }
}
MyOpenGLTest.java:
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
package ru.osanve.myopengltest;
 
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
 
import android.opengl.GLU;
import android.opengl.GLSurfaceView.Renderer;
 
public class MyOpenGLTest implements Renderer
{
    private MoveBar moveBar;
    
    public MyOpenGLTest()
    {
        moveBar = new MoveBar();
    }
    
    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    {
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
        gl.glClearDepthf(1.0f);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glDepthFunc(GL10.GL_LEQUAL);
        
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    }
    
    public void onDrawFrame(GL10 gl)
    {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glLoadIdentity();
        
        gl.glTranslatef(0.0f, -1.0f, 0.0f);
        moveBar.draw(gl);
    }
    
    public void onSurfaceChanged(GL10 gl, int width, int height)
    {
        if(height==0)
        {
            height = 1;
        }
        
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        
        GLU.gluPerspective(gl, 45.0f, (float)width/(float)height, 0.1f, 100.0f);
        
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }
}
MoveBar.java:
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
package ru.osanve.myopengltest;
 
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
 
import javax.microedition.khronos.opengles.GL10;
 
public class MoveBar
{
    private FloatBuffer vertexBuffer;
    
    private float vertices[] = {-1.0f, -1.0f, 0.0f,
                                1.0f, -1.0f, 0.0f,
                                1.0f, 1.0f, 0.0f,
                                1.5f, 1.5f, 0.0f,
                                -1.5f, -1.5f, 0.0f,
                                -1.0f, -1.5f, 0.0f};
    
    public MoveBar()
    {
        ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length*4);
        byteBuf.order(ByteOrder.nativeOrder());
        vertexBuffer = byteBuf.asFloatBuffer();
        vertexBuffer.put(vertices);
        vertexBuffer.position(0);
    }
    
    public void draw(GL10 gl)
    {
        gl.glFrontFace(GL10.GL_CW);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    }
}
Структура проекта повторена как в уроке: http://*******/mr50E

В чем может быть проблема?

Заранее спасибо.

P.S. Т.к. не вдавался в подробности какая версия Java используется на Android - создал тему в общем разделе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2011, 20:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос OpenGL (Android) (Программирование Android):

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

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

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

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

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

Откуда берутся атрибуты android:layout_width и android:layout_height в элементе LinearLayout? - Программирование Android
Недавно начал изучать Android API, а сегодня более менее разобрал основы синтакиса XML. Затем стал разбирать следующий пример: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Osanve
2 / 2 / 1
Регистрация: 03.08.2008
Сообщений: 12
25.04.2011, 17:08  [ТС] #2
Всё. Проблема решена.
[SARCASM mode="on"]Спасибо за помощь [SARCASM mode="off"]
zonex5
15 / 15 / 1
Регистрация: 23.08.2009
Сообщений: 55
13.06.2011, 20:48 #3
Лучше для таких целей использовать готовые фрэймворки и движки, как например libgdx (http://code.google.com/p/libgdx/)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2011, 20:48
Привет! Вот еще темы с ответами:

Android studio, как запускать программу сразу на android смартфоне подключенному к usb? - Программирование Android
android studio, как запускать программу сразу на android смартфоне подключенному к usb?

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast - Программирование Android
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка: Caused by: java.lang.ClassCastException:...

Как приложение Android написать на С++ в Android NDK, чтоб получить *.apk? Нужен мануал - Программирование Android
Уже не в первый раз задаю вопрос. Молчание. В лучшем случае - "RTFM" и точка. Так вот, официального мануала, где есть ответ на...

Android NDK. Как пользоваться? Когда стоит использовать его вместо Android SDK? - Программирование Android
Можно ли писать в нем готовые приложения Android?


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

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

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