繁体   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