2014-01-05 87 views
2

我想写一个着色器程序,它将呈现不同颜色的网格的三角形(所以我可以选择一个三角形)。我尝试使用gl_PrimitiveID,但它总是返回0,例如:GLSL - 片段着色器 - 每个三角形都有不同的颜色

#version 330 

out uvec3 FragColor; 

void main() 
{ 
    FragColor = uvec3(0.0, 0.0, gl_PrimitiveID); 
} 

此着色器总是呈现黑色。

+0

为什么使用浮点常量作为无符号整数vec3?你的GLSL编译器是否应该至少抱怨这种情况? (例如,采用2个浮点组件和一个整数的“uvec3(...)”没有超载)。对于这个问题,你是否诚实地绘制成一个整数颜色缓冲区?或者这是你试图做的一件事情,使'gl_PrimitiveID'工作? –

+0

对不起,我的坏,gl_PrimitiveID工作正常,问题是与我的帧缓冲区。 – user1784182

回答

3

要以最简单的方式实现您想要的效果,我会将其他顶点数组作为包含每个三角形颜色的颜色属性传递到顶点着色器。然后将其作为不同的输出传递到您的片段着色器中。就是这样。这样,您可以精确指定每个顶点的颜色。

相关问题