2015-09-06 3 views
0

У меня уже есть программа, которая может рисовать текстурированные объекты. Я хочу нарисовать линии отладки, поэтому я попытался скопировать тот же процесс рисования, который я использую для спрайтов, чтобы нарисовать линию. Я создал новый фрагмент и вершинный шейдер, потому что строки не будут текстурированы, а другой отладочный шейдер может быть полезен.Проблемы с рисованием строки в OpenGL

Моя система продолжает работать, если я пытаюсь нарисовать линию, но линия не рисует. Я попытался написать код, похожий на рабочий код для моих спрайтов, но, очевидно, я что-то пропустил или допустил ошибку.

Vertex Shader:

#version 330 core 

layout (location = 0) in vec2 position; 

uniform mat4 uniformView; 
uniform mat4 uniformProjection; 

void main() 
{ 
    gl_Position = uniformProjection * uniformView * vec4(position, 0.0f, 1.0f); 
} 

Фрагмент Shader:

#version 330 core 

out vec4 color; 
uniform vec4 uniformColor; 

void main() 
{ 
    color = uniformColor; 
} 

Drawing Код:

void debugDrawLine(glm::vec3 startPoint, glm::vec3 endPoint, glm::vec3 color, Shader debugShader) 
{ 
    GLint transformLocation, colorLocation; 
    GLfloat lineCoordinates[] = { startPoint.x, startPoint.y, 
           endPoint.x, endPoint.y}; 
    GLuint vertexArray, vertexBuffer; 

    glLineWidth(5.0f); 

    glGenVertexArrays(1, &vertexArray); 
    glGenBuffers(1, &vertexBuffer); 

    glBindVertexArray(vertexArray); 
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); 

    debugShader.Use(); 

    //Copies the Vertex data into the buffer 
    glBufferData(GL_ARRAY_BUFFER, sizeof(lineCoordinates), lineCoordinates, GL_STATIC_DRAW); 

    glVertexAttribPointer(
    0,     // attribute 0. No particular reason for 0, but must match the layout in the shader. 
    2,     // size 
    GL_FLOAT,   // type 
    GL_FALSE,   // normalized? 
    2*sizeof(GL_FLOAT), // stride 
    (GLvoid*)0   // array buffer offset 
    ); 


    //Sends the sprite's color information in the the shader 
    colorLocation = glGetUniformLocation(debugShader.Program, "uniformColor"); 
    glUniform4f(colorLocation, 1.0f, color.x, color.y, color.z); 

    //Activates Vertex Position Information 
    glEnableVertexAttribArray(0); 

    // Draw the line 
    glDrawArrays(GL_LINES, 0, 2); 

    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    glBindVertexArray(0); 
} 
+2

Это, вероятно, такой же размер, но в аргументах 'glVertexAttribPointer()' это должен быть 'sizeof (GLfloat)', а не 'sizeof (GL_FLOAT)'. –

+0

Вы уверены, что color.z не 0? Я предлагаю изменить цвет = uniformColor; цвет = vec4 (1,1,0,1); в флеш-шейдере, чтобы быть уверенным. Также попробуйте переместить enableVertArray перед вашим glVertexAttribPointer –

+0

Я исправил проблему GL_FLOAT, спасибо. Когда я попробовал цвет и включил vertArray, но ни одна из этих исправлений не работала. –

ответ

0

линии шириной более 1, не допускаются в основной профиль. Отображается ли линия, если вы задали размер 1

+0

к сожалению нет. Однако это вызывало ошибку 1281 из glGetError. –

Смежные вопросы