У меня уже есть программа, которая может рисовать текстурированные объекты. Я хочу нарисовать линии отладки, поэтому я попытался скопировать тот же процесс рисования, который я использую для спрайтов, чтобы нарисовать линию. Я создал новый фрагмент и вершинный шейдер, потому что строки не будут текстурированы, а другой отладочный шейдер может быть полезен.Проблемы с рисованием строки в 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);
}
Это, вероятно, такой же размер, но в аргументах 'glVertexAttribPointer()' это должен быть 'sizeof (GLfloat)', а не 'sizeof (GL_FLOAT)'. –
Вы уверены, что color.z не 0? Я предлагаю изменить цвет = uniformColor; цвет = vec4 (1,1,0,1); в флеш-шейдере, чтобы быть уверенным. Также попробуйте переместить enableVertArray перед вашим glVertexAttribPointer –
Я исправил проблему GL_FLOAT, спасибо. Когда я попробовал цвет и включил vertArray, но ни одна из этих исправлений не работала. –