我創建了一個非常簡單的2D星形,我想用紅色繪製。 我爲它和一個VAO創建了2個VBO。 一個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);
星出來完美的紅色。
可能是什麼問題? 謝謝!
哈哈哈,那是一個微笑! :-P –
我對OpenGL還是比較新的:D – gambit20088
您的VBO不應該包含每個頂點的顏色嗎? –