Я пытаюсь использовать 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. Но учебники, на которые я смотрю, ничего не делают с матрицами и все равно рисуют треугольник. Я просто не понимаю, чего мне не хватает, и надеюсь, что свежая пара глаз с большим опытом может помочь.
Спасибо.
lBuffer.flip()
послеlBuffer.put(...)
. - person Reto Koradi   schedule 09.05.2014