Компилируемое и работающее приложение JOGL не рисует треугольник

Я пытаюсь использовать JOGL в приложении на основе Java AWT.

Я новичок в OpenGL, поэтому начну с классического примера рисования треугольника.

Я использую OpenGL ES 2.0.

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

Данные вершин, код шейдера и процедура настройки gl взяты из руководств.

код вершинного шейдера:

#version 100
attribute vec3 vPosition;
void main()
{
    gl_Position = vec4(vPosition,1.0);
}

код фрагментного шейдера:

#version 100
precision mediump float;
void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

данные вершины:

float[] vertexPositions =
{
    0.0f, 0.5f, 0.0f,
    -0.5f, -0.5f, 0.0f,
    0.5f, -0.5f, 0.0f
};

FloatBuffer lBuffer = CommonFuncs.getFloatBuffer( 1024 );
lBuffer.put( vertexPositions );

Я установил «vPosition» так:

при инициализации:

theRenderer.glBindAttribLocation( theProgram, 0, "vPosition" );

на экране:

theRenderer.glUseProgram( theProgram );
theRenderer.glVertexAttribPointer( 0, 3, GL.GL_FLOAT, false, 0, lBuffer );
theRenderer.glEnableVertexAttribArray( 0 );
theRenderer.glDrawArrays( GL.GL_TRIANGLES, 0, 3 );
theRenderer.glDisableVertexAttribArray( 0 );
theRenderer.glUseProgram( 0 );

однако я ничего не вижу на экране, кроме голубого синего чистого цвета, который я указал и назвал ранее в «дисплее».

Я пробовал всевозможные конфигурации, пытаясь указать матрицу представления модели и проекции и умножить на них vPosition. Но учебники, на которые я смотрю, ничего не делают с матрицами и все равно рисуют треугольник. Я просто не понимаю, чего мне не хватает, и надеюсь, что свежая пара глаз с большим опытом может помочь.

Спасибо.


person Peter Flower    schedule 09.05.2014    source источник
comment
разместить больше кода. Просто предположение - возможно, вы очищаете дисплей после того, как треугольник был нарисован (glClear в OpenGL, не уверен, что JOGL использует тот же вызов).   -  person hoefling    schedule 09.05.2014
comment
Возможно, вам потребуется сбросить позицию буфера после того, как вы добавили в него данные вершины. Попробуйте lBuffer.flip() после lBuffer.put(...).   -  person Reto Koradi    schedule 09.05.2014
comment
Возможно, вам поможет этот простой пример: github.com/sgothel/jogl/blob/master/src/test/com/jogamp/opengl/   -  person gouessej    schedule 11.05.2014


Ответы (1)


Это действительно была проблема, вызванная тем, что я не вызывал lBuffer.flip() - горе мне: спасибо @Reto Koradi за то, что заметил мою простую ошибку - в конце концов, свежий взгляд сделал свое дело :)

person Peter Flower    schedule 11.05.2014