gpt4 book ai didi

c++ - opengl - 每个三角形的独特颜色

转载 作者:行者123 更新时间:2023-11-28 06:23:35 32 4
gpt4 key购买 nike

我正在尝试对我的模型进行着色,以便每个三角形都是基于其在缓冲区中的位置的纯色、独特的颜色。我想知道这样做是否合适。

如果您不需要有关 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 之间 float (我不知道 1.0f 是否包含在内并且是我问题的一部分)。

如果 1.0f end 包含在内,我假设我上面显示的方法将准确工作,但如果它是独占的,我认为我可能必须除以 256.0f 而不是 255.0 f。哪个合适?

替换示例:

r = (gl_PrimitiveID % 255) / 256.0f; // notice 256.0f instead of 255.0f

最佳答案

我会建议一个可能更简单的替代方案。你写道:

OpenGL has its RGB values such that they are floats between 0.0f and 1.0f (I do not know if 1.0f is inclusive and is part of my problem).

事实并非如此。 OpenGL 支持各种不同的格式、 float 、规范化整数和非规范化整数。对于您的用例,我只建议使用格式 GL_R32UI,这样您就可以直接将 gl_PrimitiveID 分配给着色器的输出变量。

关于c++ - opengl - 每个三角形的独特颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910861/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com