簡體   English   中英

OpenGL-使用片段着色器獲得奇怪的結果

[英]OpenGL - getting a weird results working with a fragment shader

我創建了一個非常簡單的2D星形,想要用紅色繪制。 我為此創建了2個VBO和一個VAO。 一個VBO用於恆星的頂點,另一個用於我希望傳遞給着色器的顏色值。

這是我創建顏色數據的方式:(假設我對紅色感興趣)

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);

星星發出完美的紅色。

可能是什么問題呢? 謝謝!

glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec4), starColor.color, GL_STATIC_DRAW);

應該

glBufferData(GL_ARRAY_BUFFER, numberOfElements * sizeof(glm::vec4), starColor.color, GL_STATIC_DRAW);

其中numberOfElements應該是您擁有的頂點數。 您必須為每個頂點發送1種顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM