Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Андроид тест OpenGL, Цветовой буфер 
V
    Опции темы
CPlusPlusFAN
Дата 7.10.2011, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



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

Не отображается цвет. Выводится белый прямоугольник, а по идее должен быть разноцветным.

Код

public class MyRenderer implements GLSurfaceView.Renderer
{
    private Context context;
    
    private int vboId;
    private int texId;
    
    public MyRenderer(Context context)
    {
        this.context = context;
    }
    
    @Override
    protected void finalize()
    {
        int[] buffers = { this.vboId };
        GLES20.glDeleteBuffers(1, buffers, 0);
    }
    
    @Override
    public void onDrawFrame(GL10 gl)
    {
        GL11 gl11 = (GL11)gl;
        
        GLES20.glClearColor(0f, 0f, 0f, 1f);
        GLES20.glClear(GL10.GL_COLOR_BUFFER_BIT);
        
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
        
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, this.vboId);
        
        gl11.glVertexPointer(3, GL11.GL_FLOAT, 6 * 4, 0);
        gl11.glColorPointer(3, GL11.GL_FLOAT, 6 * 4, 12);
        
        GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
        
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
        
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height)
    {
        GLES20.glViewport(0, 0, width, height);
    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    {
        createVertexBuffer(gl);
    }
    
    
    private void createVertexBuffer(GL10 gl)
    {
        float[] coords = {
            
            -0.5f, -0.5f, 0f, 0f, 0f, 1f,
            -0.5f, 0.5f, 0f, 0f, 1f, 1f,
            0.5f, -0.5f, 0f, 1f, 0f, 1f,
            0.5f, 0.5f, 0f, 1f, 1f, 1f
                
        };
        
        int size = 6 * 4 * 4;
        
        ByteBuffer buffer = ByteBuffer.allocateDirect(size);
        buffer.order(ByteOrder.nativeOrder());
        
        FloatBuffer vbo = buffer.asFloatBuffer();
        vbo.put(coords);
        vbo.position(0);
        
        int[] buffers = new int[1];
        
        GLES20.glGenBuffers(1, buffers, 0);
        this.vboId = buffers[0];
        
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, this.vboId);
        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, size, vbo, GLES20.GL_STATIC_DRAW);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
        
        buffer.clear();
    }

}


В массиве у меня сначала координаты, а потом цвета. Если пишу gl.glColor4f(1f, 0f, 0f, 1f) то цвет есть.

ЗЫ Я понимаю, что раз пользую желе 2.0, то лучше бы сразу делать на шейдерах, но увы, пока не заставлю работать так, совесть не позволит перейти на шейдеры. :(((

Спасибо за внимание.
PM MAIL ICQ Jabber   Вверх
CPlusPlusFAN
Дата 9.10.2011, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Проблема разрешилась. В цвет надо было по 4 координаты передавать.
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0685 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.