opengl - 如何在opengl中渲染从一侧开始到另一侧的颜色渐变?

标签 opengl opengl-es rendering texture-mapping opengl-3

我想渲染从一侧到另一侧的颜色渐变。在图中您可以看到,颜色渐变从最小边界框到最大边界框。代码如下。

Point c = (VERTICES[i] - min) / (max - min);
p_COLOR[i].setRGB(c.red, c.green, c.blue);

enter image description here

这里的问题是,颜色渐变不遵循任何方向(例如从下到上:下侧有两种颜色红色和蓝紫色)。但我需要应用从 -x 到 x 或 -y 到 y 或 -z 到 z 开始的渐变,意味着如果红色从 -y 开始,那么只有红色覆盖 -y 侧区域,然后通过将渐变从 -y 移动到 y ,先增加红色,然后蓝色,然后绿色,然后黄色等。向下不应有红色和蓝紫色,必须只有红色,然后向上移动到蓝色,然后绿色,依此类推。

我该怎么做?等式是什么?

最佳答案

您的解决方案非常简单,但非常有限。如果您希望渐变仅应用于一个轴,则应该只使用 VERTICES 结构的一个组件(我假设 VERTICES[i] 保存当前顶点的位置)。将您的代码分为两部分:

梯度函数

vec3 Gradient (float param) 
{
    param = clamp(param, 0, 1);

    // we are treating these colors as HSL now:
    vec3 ColorA (0, 0.5, 0.5);
    vec3 ColorB (1, 0.5, 0.5);

    // so now we need to convert them to plain old RGB
    // note how the blending equation remains the same
    return HSL2RGB(param * ColorA + (1-param) * ColorB); // simple blending equation
}

着色功能

float c = ((VERTICES[i] - min) / (max - min)).x; // or y,z
p_COLOR[i].setRGB(Gradient(c));

着色器使用普通的 GLSL,所以请原谅我对 ES 的无知。

关于opengl - 如何在opengl中渲染从一侧开始到另一侧的颜色渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596652/

相关文章:

android - 为 OpenGL ES 渲染加载 3D 对象和纹理

android - 法线贴图与法线坐标

iphone - 在着色器中除以 0 时会发生什么?

audio - WASAPI呈现保存的音频文件

opengl - 使用 IBO 制作动画——好还是坏?

c++ - 在 Qt 中将 x 可执行文件作为按钮事件运行时出错

algorithm - 行进立方体算法中的等值

OpenGL 顶点数组/缓冲区对象

html - 我可以在 SSRS 2005 中从 SQL 数据库呈现 HTML 吗?

html - 渲染 HTML 标签 Laravel 5 Blade 模板