c++ - 带有片段着色器的 OpenGL 3.3 不同颜色

标签 c++ opengl colors shader opengl-3

我正在尝试为 3 个圆圈着色,但只出现了 3 个白色圆圈。本例中 n 为 3。每个顶点有5个点,2个用于位置,3个用于颜色

这里是我认为可能存在问题的地方:

    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glVertexAttribPointer(
        0,                  
        2,                 
        GL_FLOAT,           
        GL_FALSE,          
        5*sizeof(float), 
        (void*)0            
    );

    glEnableVertexAttribArray(1);
    glVertexAttribPointer(
        1, 
        3,
        GL_FLOAT,
        GL_FALSE, 
        5*sizeof(float), 
        (void*)(2*sizeof(float))
    );

    glDrawElements(GL_TRIANGLES, 20 * 3 * n, GL_UNSIGNED_INT, 0);

    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);

我的着色器:

#version 330 core

in vec3 Color;

out vec4 outColor;

void main()
{
    outColor = vec4(Color, 1.0);
}


#version 330 core

layout(location = 0) in vec2 position;

layout(location = 1) in vec3 color
out vec3 Color

void main(){
    gl_Position = vec4(position, 0.0, 1.0);
    Color = color;
}

感谢关注 安迪

编辑:

layout(location = 1) in vec3 color
    out vec3 Color

layout(location = 1) in vec3 color;
    out vec3 Color;

最佳答案

(发布评论中的解决方案以标记此问题已回答。)

这两行末尾缺少分号:

layout(location = 1) in vec3 color
out vec3 Color

将来,在编译着色器后使用 glGetShaderGL_COMPILE_STATUS 检查编译是否成功,并使用 glGetShaderInfoLog 检索确切的错误和警告。参见 Shader Compilation获取更多详细信息和代码示例。

关于c++ - 带有片段着色器的 OpenGL 3.3 不同颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744203/

相关文章:

c++ - 如何将 C++ 程序的输出用作 Bash 脚本中的变量

opengl - 如何使用 OpenGL 获得景深效果?

elasticsearch - Vega-lite热图检测颜色

c++ - 如何在一行中检查 std::vector 中是否存在元素?

c++ - 在 C++ 中将 long 转换为 CString

c++ - 使用大数组索引增加访问时间

c++ - 计算着色器不会写入缓冲区

c - OpenGL 头文件版本信息不匹配

php - 如何根据给定日期更改php中的单元格颜色

C#,如何在 RGB 中生成仅与 CMYK 兼容的颜色