【发布时间】:2015-03-07 02:53:43
【问题描述】:
我正在尝试对我的模型进行着色,以使每个三角形都是基于其在缓冲区中的位置的纯色、独特的颜色。我想知道这是否是一种正确的方法。
如果您不需要有关 OpenGL 的信息,可以直接跳到最后一段
这是我的片段着色器,它将根据缓冲区中三角形的索引进行着色。
#version 420 core
out vec3 color
void main(){
float r, g, b;
r = (gl_PrimitiveID % 255) / 255.0f;
g = ((gl_PrimitiveID / 255) % 255) / 255.0f;
b = ((gl_PrimitiveID / (255 * 255)) % 255) / 255.0f;
color = vec3(r, g, b);
}
它使用gl_PrimitiveID,它本质上给出了它正在着色的三角形在缓冲区中的位置。因此,如果我执行命令绘制缓冲区并说缓冲区中有三角形,gl_PrimitiveID 会说第一个是0,然后第二个三角形是1,第n 个三角形是n-1。
OpenGL 的 RGB 值在 0.0f 和 1.0f 之间浮动(我不知道 1.0f 是否包含在内,这是我的问题的一部分)。
如果 1.0f end 是包容性的,我假设我上面显示的方法将准确地工作,但如果它是独占的,我认为我可能必须除以 256.0f 而不是 255.0f。哪个合适?
替换示例:
r = (gl_PrimitiveID % 255) / 256.0f; // notice 256.0f instead of 255.0f
【问题讨论】: