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

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

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

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

31.10.2012, 22:16. Просмотров 641. Ответов 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;
    }
}
В чем ошибка? Я уже два дня пытаюсь понять Просто изменение цвета на нажатие работает, а вот рендер спрайта выдает ошибку...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 22:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается отрендрить треугольник OpenGL 2.0 (Программирование Android):

Треугольник в Qt Quick через OpenGL 2.0 - C++ Qt
Доброго времени суток. Дали задание построить треугольник в qt quick, чтобы он при нажатии кнопки вращался и менял цвета, но когда начал...

треугольник не получается - C++

Не получается обратный треугольник - C++
Я сделал 2 треугольника Вариант 1. #include &lt;iostream.h&gt; int main () { for(int i=10;i&gt;=0;i--) {

openGL первая программа. не получается - OpenGL
вот такая (недописанная еще ) программа, компилятора выводит ошибки такого типа &quot;Ошибка 1 fatal error C1083: Не удается открыть файл...

Создать класс треугольник,(самому не получается - Delphi
Создать класс треугольник, члены класса - координаты 3-х точек. Предвидеть в классе методы проверки существования треугольника, вычисление...

Не получается нарисовать фигурки тетриса. C++ Opengl - OpenGL
Пожалуста помогите, не получается нарисовать фигурки тетриса, вроде все правильно в чем проблема не понимаю. Рисует какую-то хрень, вот код...

2
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.10.2012, 23:10 #2
какую ошибку?
0
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598
31.10.2012, 23:22  [ТС] #3
Цитата Сообщение от V0v1k Посмотреть сообщение
какую ошибку?
Спасибо, уже все нашел) Ошибка, вообще, глупая - число вершин задал неправильно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 23:22
Привет! Вот еще темы с ответами:

Не получается открыть 16 битное изображение С++ OpenGL - Matlab
int main(int argc, char* argv) { char filename = &quot;DICOM_Image_for_Lab_5.dcm&quot;; gdcm::ImageReader reader; ...

Не получается ничего создать, пользуясь статьей про openGL - Графика и игры
Читал книгу краснова о опенГЛ и изучил статью http://www.cyberforum.ru/graphics/thread83413.html Сразу же возникла проблема- при попытке...

Подключение библиотеки OpenGL. Не получается создать файл описание геометрии - C++
Добрый день. Не получается заставить линковщик видеть: #pragma comment(lib,&quot;glu32.lib&quot;) #pragma comment(lib,&quot;glaux.lib&quot;) #pragma...

Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник - C++
Задание звучит так: Нужно создать базовый класс Треугольник с двумя наследующими его классами - равносторонний треугольник (·...


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

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

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