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

Posted

技术标签:

【中文标题】带有片段着色器的OpenGL 3.3不同颜色【英文标题】:OpenGL 3.3 different colours with fragment shader 【发布时间】:2013-11-13 16:24:03 【问题描述】:

我正在尝试为 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;

【问题讨论】:

实际上,到目前为止,您发布的部分在我看来确实不错。您可以在创建顶点数组并创建/填充缓冲区的位置发布代码吗? 我忘记在我的片段着色器中对颜色和颜色向量进行分号...已经看了好几个小时了。感谢您查看 着色器信息日志会警告您此解析错误,如果您尚未了解此功能,请参阅:glGetShaderInfoLog (...) 也许像@Andon M. Coleman 这样的人可以在答案中写出来,所以可以将其标记为已关闭? @AndrewSeymour:标准的方式就是让你写出正确的答案并接受它 【参考方案1】:

(发布来自 cmets 的解决方案以标记此问题已回答。)

这两行末尾缺少分号:

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

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

【讨论】:

以上是关于带有片段着色器的OpenGL 3.3不同颜色的主要内容,如果未能解决你的问题,请参考以下文章

跨多个着色器的 OpenGL 统一

带有片段着色器的 GLSL 仅渲染黑色 GL_POINTS

使用制服时 Xamarin OpenGL 片段着色器的奇怪行为

用于片段着色器的 OpenGL GLSL 绑定采样器

顶点着色器的绘制操作

传递给片段着色器的纹理坐标全部为 0