带有片段着色器的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
将来,在编译着色器后使用glGetShader
和GL_COMPILE_STATUS
来检查编译是否成功,并使用glGetShaderInfoLog
来检索确切的错误和警告。有关更多详细信息和代码示例,请参阅Shader Compilation。
【讨论】:
以上是关于带有片段着色器的OpenGL 3.3不同颜色的主要内容,如果未能解决你的问题,请参考以下文章