Я создал очень простую двумерную звездную форму, которую я хочу нарисовать красным цветом. Я создал 2 VBOs для него и один VAO. Один VBO для вершин звезды, а один для значений цвета, которые я хочу передать в шейдер.OpenGL - получение странных результатов, работающих с фрагментарным шейдером
Вот как я создал данные цветов: (скажем, я заинтересован в красном цвете)
struct CArray {
static const GLuint numColor = 1;
glm::vec4 color[numColor];
CArray() {
color[0] = glm::vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
};
CArray starColor;
Это мой буфер процесс связывания:
glEnableVertexAttribArray(12);
glGenBuffers(1, &g_bufferObject3);
glBindBuffer(GL_ARRAY_BUFFER, g_bufferObject3);
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec4), starColor.color, GL_STATIC_DRAW);
glVertexAttribPointer(12, 4, GL_FLOAT, GL_FALSE, 0, 0);
Это мой вершинный шейдер:
layout (location=0) in vec4 position;
layout(location=12) in vec4 color;
out vec4 colorVertFrag;
uniform mat4 ModelViewMatrix;
uniform mat4 ProjectionMatrix;
void main() {
gl_Position = ProjectionMatrix * ModelViewMatrix * position;
colorVertFrag = color;
}
Это мой пиксельный шейдер:
in vec4 colorVertFrag;
out vec4 color;
void main() {
color = colorVertFrag;
}
И вот результат я получаю: (игнорировать точки, которые образуют глаза звезды, нос и улыбка, они должны быть черными)
Как вы можете видеть, вместо получить сплошной красный цвет, я получаю какой-то странный черно-красный градиент. Если я поставил следующую строку в моей вершинных шейдеров:
colorVertFrag = vec4(1.0, 0.0, 0.0, 1.0);
Звезда выходит совершенно красный.
В чем может быть проблема? Спасибо!
hahaha, это улыбка! :-P –
Я до сих пор довольно новичок в OpenGL: D – gambit20088
Не должен ли ваш цвет VBO содержать цвет для каждой вершины? –