0

我想要的是,我想将颜色线性应用于网格。它可以是从 Vertex[0] 到 Vertex[n] 或从 -Min.x 到 Max.x。Min.x 应该是深红色,然后随着顶点位置的增加,红色应该变成绿色,然后再次增加并以蓝色结束。第二个选项可能是,如果我指定任何随机 Vertex[any] 并从该顶点开始颜色映射,那么颜色映射应该以增量顺序转换为 RGB。您可以将其称为从 XYZ 到 RGB 的颜色图。我怎样才能做到这一点 ?任何的想法 ?首先如何将 XYZ 转换为 RGB,然后如何制作颜色图或渐变或任何你能说的。

附图可以给你一个想法。在该图中,归一化的顶点 X=R、Y=G、Z=B 被渲染为颜色。它只是一个测试。给我一个想法,我怎样才能使它成为完美的线性地图。

在此处输入图像描述

4

1 回答 1

1

首先,您必须选择一个范围来映射颜色值,因为 RGB 分量是有限的,而您可能有一个巨大的网格。考虑使用网格的边界框。给定p1p2分别是盒子的最小和最大角,这样的映射可能是:

color[i] = 255 * (position[i] - p1) / (p2 - p1);

您可以在顶点着色器中执行此映射,也可以使用 CPU 来获取顶点颜色属性的数组,您可以直接在 OpenGL 中使用平滑插值。请注意,默认情况下应启用平滑插值。对于 OpenGL 2.1,使用glShadeModel (GL_SMOOTH)启用它。

如果您的网格是 UV 映射的,并且您希望颜色映射到纹理上,请使用纹理坐标作为位置渲染您的网格,然后使用glReadPixels()FBO 检索渲染的图像。

于 2012-09-02T14:12:37.067 回答