OpenGL 3.3片段着色器实现不同颜色

6

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

1
我忘记在我的片段着色器中为颜色和颜色向量加上分号了...已经看了好几个小时了。不过感谢你来看看。 - Andrew Seymour
哦,我也错过了... - derhass
4
如果您不知道此功能,着色器信息日志将警告您有关此解析错误的情况。请参见:glGetShaderInfoLog(...) - Andon M. Coleman
1
也许像 @Andon M. Coleman 这样的人可以写一个答案,这样就可以标记为关闭了? - leetNightshade
1
@AndrewSeymour:标准的方法就是让你自己写出正确的答案并接受它。 - Bahbar
显示剩余3条评论
1个回答

2
(将评论中的解决方案发布,以标记此问题已回答。)
这两行代码末尾缺少分号:
layout(location = 1) in vec3 color
out vec3 Color

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接