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

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

Войти
Регистрация
Восстановить пароль
 
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
#1

Не получается отрендрить треугольник OpenGL 2.0 - Программирование Android

31.10.2012, 22:16. Просмотров 621. Ответов 2
Метки нет (Все метки)

Здравствуйте!

Пытаюсь написать свой 2D-движок (просто спортивный интерес, не нужно мне говорить, что это почти нереально и советовать AndEngine, я просто хочу разобраться как это все работает и сделать хотя бы простенький 2D-рендерщик).
Вот код:
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
package ru.contedevel.quantum;
/**
 * 
 * @author ConteDevel
 * Class QObject (abstract)
 */
public abstract class QObject {
    //Переменная, хранящая тип класса экземпляра
    public int type;
    
    //Типы классов
    public static final int Q_TYPE_SPRITE = 0;
    public static final int Q_TYPE_ANIMATIONSPRITE = 1;
    public static final int Q_TYPE_VERTEX = 2;
    public static final int Q_TYPE_LINE = 3;
    public static final int Q_TYPE_TRIANGLE = 4;
    public static final int Q_TYPE_RECTANGLE =5;
    public static final int Q_TYPE_CIRCLE = 6;
    
    //Функция обновления параметров
    public void update() {
        
    }
    
    //Функция отрисовки
    public void draw() {
        
    }
    
    //Возвращает, был ли выбран объект
    public boolean isSelected() {
        return false;//По умолчанию "ложь"
    }
}
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
package ru.contedevel.quantum;
 
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
 
import javax.microedition.khronos.opengles.GL10;
 
import android.content.Context;
/**
 * 
 * @author ConteDevel
 * class QRectangle
 */
public class QRectangle extends QObject {
    private FloatBuffer vertexBuffer;
    private ShortBuffer indexBuffer;
    ByteBuffer bb;
    
    protected float vertices[] = {
            -1.0f,  1.0f, 0f,
             1.0f,  1.0f, 0f,
             1.0f, -1.0f, 0f,
    };
    
    public QRectangle() {
        //Буфер вершин
        bb = ByteBuffer.allocateDirect(vertices.length*4);
        bb.order(ByteOrder.nativeOrder());
        vertexBuffer = bb.asFloatBuffer();
        ByteBuffer ibb = ByteBuffer.allocateDirect(3*2);
        ibb.order(ByteOrder.nativeOrder());
        indexBuffer = ibb.asShortBuffer();
        
        for (int i = 0; i < vertices.length; i++) {
            for (int j = 0; j < 3; j++) {
                vertexBuffer.put(vertices[i*3+j]);
            }
        }
        
        short[] indecesArray = {0, 1, 2};
        
        for (int i = 0; i < 3; i++) {
            indexBuffer.put(indecesArray[i]);
        }
        
        vertexBuffer.position(0);
        indexBuffer.position(0);
    }
    
    public void draw (GL10 gl) {
        gl.glColor4f (1.0f, 0, 0, 0.5f);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glDrawElements(GL10.GL_TRIANGLES, 3, GL10.GL_UNSIGNED_SHORT, indexBuffer);
    }
}
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
package ru.contedevel.quantum;
 
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
 
import javax.microedition.khronos.opengles.GL10;
 
import android.content.Context;
/**
 * 
 * @author ConteDevel
 * class QRectangle
 */
public class QRectangle extends QObject {
    private FloatBuffer vertexBuffer;
    private ShortBuffer indexBuffer;
    ByteBuffer bb;
    
    protected float vertices[] = {
            -1.0f,  1.0f, 0f,
             1.0f,  1.0f, 0f,
             1.0f, -1.0f, 0f,
    };
    
    public QRectangle() {
        //Буфер вершин
        bb = ByteBuffer.allocateDirect(vertices.length*4);
        bb.order(ByteOrder.nativeOrder());
        vertexBuffer = bb.asFloatBuffer();
        ByteBuffer ibb = ByteBuffer.allocateDirect(3*2);
        ibb.order(ByteOrder.nativeOrder());
        indexBuffer = ibb.asShortBuffer();
        
        for (int i = 0; i < vertices.length; i++) {
            for (int j = 0; j < 3; j++) {
                vertexBuffer.put(vertices[i*3+j]);
            }
        }
        
        short[] indecesArray = {0, 1, 2};
        
        for (int i = 0; i < 3; i++) {
            indexBuffer.put(indecesArray[i]);
        }
        
        vertexBuffer.position(0);
        indexBuffer.position(0);
    }
    
    public void draw (GL10 gl) {
        gl.glColor4f (1.0f, 0, 0, 0.5f);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glDrawElements(GL10.GL_TRIANGLES, 3, GL10.GL_UNSIGNED_SHORT, indexBuffer);
    }
}
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.contedevel.quantum;
 
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.view.MotionEvent;
 
public class QGLView extends GLSurfaceView {
    private static final String LOG_TAG = QGLView.class.getSimpleName();
    private QGLRenderer _renderer;
 
    public QGLView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        _renderer = new QGLRenderer();
        setRenderer(_renderer);
        setRenderMode (GLSurfaceView.RENDERMODE_WHEN_DIRTY);
        setRenderMode (GLSurfaceView.RENDERMODE_CONTINUOUSLY);
    }
    
    
    public boolean onTouchEvent(final MotionEvent event) {
        queueEvent(new Runnable () {
 
            public void run() {
                // TODO Auto-generated method stub
                _renderer.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);
            }
            
        });
        return true;
    }
 
}
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
package ru.contedevel.sapper;
 
import android.os.Bundle;
import ru.contedevel.quantum.*;
import android.app.Activity;
import android.view.Menu;
 
public class GLActivity extends Activity {
    private static final String LOG_TAG = GLActivity.class.getSimpleName();
    private QGLView _vortexView;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        _vortexView = new QGLView(this);
        setContentView(_vortexView);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_gl, menu);
        return true;
    }
}
В чем ошибка? Я уже два дня пытаюсь понять Просто изменение цвета на нажатие работает, а вот рендер спрайта выдает ошибку...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 22:16     Не получается отрендрить треугольник OpenGL 2.0
Посмотрите здесь:
Треугольник в Qt Quick через OpenGL 2.0 C++ Qt
C++ треугольник не получается
C++ Не получается обратный треугольник
OpenGL openGL первая программа. не получается
Создать класс треугольник,(самому не получается Delphi
Не получается нарисовать фигурки тетриса. C++ Opengl OpenGL
Matlab Не получается открыть 16 битное изображение С++ OpenGL
Не получается ничего создать, пользуясь статьей про openGL
Подключение библиотеки OpenGL. Не получается создать файл описание геометрии C++
C++ Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник
Алгоритм Джарвиса. Прорисовывается еще одна линия, получается треугольник и программа намертво виснет C#
Пустой прямоугольный треугольник. Размер катетов – n. ПОМОГИТЕ СДЕЛАТЬ ЕГО ПУСТЫМ. ОН ПОЛНЫЙ У МЕНЯ ПОЛУЧАЕТСЯ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.10.2012, 23:10     Не получается отрендрить треугольник OpenGL 2.0 #2
какую ошибку?
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
31.10.2012, 23:22  [ТС]     Не получается отрендрить треугольник OpenGL 2.0 #3
Цитата Сообщение от V0v1k Посмотреть сообщение
какую ошибку?
Спасибо, уже все нашел) Ошибка, вообще, глупая - число вершин задал неправильно
Yandex
Объявления
31.10.2012, 23:22     Не получается отрендрить треугольник OpenGL 2.0
Ответ Создать тему
Опции темы

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