我想要的是,我想要线性地将颜色应用于网格。它可以是从Vertex [0]到Vertex [n]或从-Min.x到Max.x. Min.x应该具有深红色,然后随着顶点位置的增加,红色应该变换为绿色然后再次增加并以蓝色结束。 第二个选项可能是,如果我指定任意随机Vertex [any]并从该顶点开始颜色映射,那么颜色映射应该使用增量顺序转换为RGB。 您可以将其称为从XYZ到RGB的颜色映射。我怎样才能做到这一点 ?任何的想法 ? 首先,我如何将XYZ转换为RGB,然后如何制作颜色图或渐变或任何你可以说的。
附图可以给你一个想法。在该图中,归一化顶点X = R,Y = G,Z = B被渲染为颜色。它只是一个考验。 给我一个想法,我怎样才能使它成为完美的线性地图。
答案 0 :(得分:1)
首先,您必须选择一个范围来映射颜色值,因为RGB组件是有限的,而您可能有一个巨大的网格。考虑使用网格的边界框。鉴于p1
和p2
分别是您的框的最小和最大角,这样的映射可能是:
color[i] = 255 * (position[i] - p1) / (p2 - p1);
您可以在顶点着色器中或使用CPU执行此映射,以获取顶点颜色属性的数组,您可以直接使用OpenGL进行平滑插值。请注意,默认情况下应启用平滑插值。使用OpenGL 2.1,使用glShadeModel (GL_SMOOTH)
启用它。
如果您的网格物体是UV贴图,并且您希望颜色映射到达纹理,请使用纹理坐标作为位置渲染网格,然后使用glReadPixels()
或FBOs. 检索渲染的图像p>