具有固定层数的渐变

2023-12-14

我画了一组四边形。对于每个四边形,我在其顶点都有一个定义的颜色。

例如。现在我的四边形集看起来像:

enter image description here

我以相当原始的方式实现了这样的结果,只需将其作为四边形每个顶点的属性颜色传递到顶点着色器即可。

我的着色器非常简单:

顶点着色器

#version 150 core

in vec3 in_Position;
in vec3 in_Color;
out vec3 pass_Color;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;

void main(void) {
    gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);

    pass_Color = in_Color;
}

片段着色器

#version 150 core
in vec3 pass_Color;
out vec4 out_Color;

void main(void) {
    out_Color = vec4(pass_Color, 1.0);
}

现在我的目标是获得从顶点到顶点的颜色非连续分布。也可称为“等级分布”。

我的四边形集应该如下所示:

enter image description here

我怎样才能达到这样的结果?

EDIT:

With vesan and Nico Schertler盘子看起来像这样。 (不可接受的变体)

enter image description here


我的猜测是您使用的色调颜色和顶点插值会出现问题(例如跳过一些波段)。相反,可能会传入单个通道值并计算片段着色器中的色调和离散级别(如@vesan 所做的那样)。我自己使用这些功能...

vec3 hueToRGB(float h)
{
    h = fract(h) * 6.0;
    vec3 rgb;
    rgb.r = clamp(abs(3.0 - h)-1.0, 0.0, 1.0);
    rgb.g = clamp(2.0 - abs(2.0 - h), 0.0, 1.0);
    rgb.b = clamp(2.0 - abs(4.0 - h), 0.0, 1.0);
    return rgb;
}

vec3 heat(float x)
{
    return hueToRGB(2.0/3.0-(2.0/3.0)*clamp(x,0.0,1.0));
}

and then

float discrete = floor(pass_Value * steps + 0.5) / steps; //0.5 to round
out_Color = vec4(heat(discrete), 1.0);

where in float in_Value是0到1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有固定层数的渐变 的相关文章

  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • GL_CULL_FACE使所有对象消失

    我正在尝试在 openGL3 3 中创建一些简单的多边形 我有两种类型的对象 具有以下属性 对象 1 10 个顶点 按顺序在下面列出 存储在GL ARRAY BUFFER并使用GL TRIANGLE FAN v x y z w v 0 0
  • GLSL NVidia 方形神器

    当 GLSL 着色器在以下 GPU 上生成不正确的图像时 我遇到了问题 GT 430 GT 770 GTX 570显卡760 但在这些上正常工作 英特尔高清显卡 2500英特尔高清4000英特尔4400显卡740MRadeon HD 631
  • Glew+GLFW Win32 无依赖项 Visual Studio

    是否可以在不将文件复制到 C 的情况下构建并链接 Glew 和 GLFW 我找不到任何说明如何在不将 DLL 复制到 C 上的 Visual Studio 目录的情况下使用这些库的文档 我只想包含项目目录中所需的所有 dll 和 lib 文
  • 根据 GLSL 中向量的特定分量执行最小-最大的最快方法?

    我需要在我的 GLSL 代码中多次调用这种函数 vec2 minx vec2 a vec2 b if a x lt b x return a else return b 我担心过度分支 有没有办法避免 if else 结构 我建议使用 GL
  • 使用 JOGL 和 Android OpenGL 编写可移植 Java 应用程序

    我计划编写一款可以在 PC 和 Android 上运行的 Java 3D 游戏 不幸的是 这两个平台似乎没有通用的 OpenGL API API 是否有显着差异 有没有办法在两个版本中使用相同的 3D 代码 这是不是一个好主意 Androi
  • OpenGL 3.1 中已弃用 glLineStipple

    glLineStipple在最新的 OpenGL API 中已被弃用 它被替换成什么 如果不更换 怎样才能达到类似的效果呢 我当然不想使用兼容性配置文件 抱歉 它还没有被任何东西取代 我想到的第一个模拟它的想法是几何着色器 您向几何着色器提
  • gldrawarrays 不绘制任何东西

    我正在尝试用 VBO 绘制一个三角形 我在窗口上没有看到任何像素 我也没有看到任何 GL ERROR 这是我尝试运行的代码 include
  • OpenGL:伽玛校正图像看起来不线性

    我使用 OpenGL 进行渲染 当我将线性值写入默认帧缓冲区 没有任何伽玛校正 时 它们在我的显示器上显示为线性 这违背了我认为我所知道的关于伽马校正的一切 如下所述 http gamedevelopment tutsplus com ar
  • 致命错误 gl.h 包含在 glew.h 之前

    include
  • GLSL - 测试片段值

    假设你有一个vec3 colourIn从一个vertex shader to a frag shader 有没有办法测试一个值并根据需要覆盖它 例如 将任何蓝色值大于0 5的片段设置为白色 In my Shader frag我实施了这个测试
  • 用于新 Windows 游戏项目的 OpenGL 或 Direct3D?或者是其他东西?

    我正在 Windows 上启动一个爱好游戏项目 该项目将大量使用 3D 图形效果 它很可能是用 C 编写的 我应该使用 OpenGL 还是 Direct3D 作为我的图形后端 为什么 或者我应该使用现成的图形引擎 例如OGRE 3D htt
  • 在 C++ GPGPU 库中嵌入 cg 着色器

    我正在编写一个 GPGPU 流体模拟 它使用 C OpenGL Cg 运行 目前 该库要求用户指定着色器的路径 然后从中读取它 我发现必须在我自己的项目和测试中指定这一点非常烦人 因此我希望将着色器内容与其余内容链接起来 理想情况下 我的
  • 重新创建窗口而不破坏上下文

    这个问题是关于使用 OpenGL 的图形应用程序 当时我正在使用 GLFW 框架 但我考虑更改它 我的目标是让用户 尽可能 在全屏模式和窗口模式之间不断切换 此过程应该花费不到一秒的时间 并且可以在运行时发生 例如 看看游戏 我的世界 用户
  • 纹理的内部格式

    看下面的OpenGL函数 void glTexImage2D GLenum target GLint level GLint internalFormat GLsizei width GLsizei height GLint border
  • 如何在不使用 Kinect SDK 函数的情况下将深度空间中的点转换为 Kinect 中的颜色空间?

    我正在做一个增强现实应用程序 将 3D 对象叠加在用户的彩色视频之上 使用 Kinect 1 7 版本 虚拟对象的渲染在 OpenGL 中完成 我已经成功地在深度视频上叠加了 3D 对象 只需使用 NuiSensor h 标头中深度相机的固
  • glVertexAttribDivisor 和 glVertexBindingDivisor 有什么区别?

    我一直在寻找将属性与任意顶点分组关联起来的方法 起初似乎是我实现这一目标的唯一方法 但后来我偶然发现了这个问题 https stackoverflow com questions 14169228 opengl single vertex
  • 帧缓冲区和在 opengl 中使用着色器

    我对帧缓冲区有点困惑 我想要做的是使用附加了多个纹理的帧缓冲区 填充每个纹理 然后使用着色器组合 混合 所有纹理以创建新的输出 听起来很容易 是的 我也是这么想的 但我不明白 如何将当前绑定的纹理传递给着色器 您需要的是将纹理放入特定的槽中
  • 在 iOS 上使用 OpenGL ES 2.0 进行实例化绘制

    简而言之 谁能确认是否可以使用内置变量gl InstanceID or gl InstanceIDEXT 在 iOS 上使用 OpenGL ES 2 0 的顶点着色器中GL EXT draw instanced启用 Longer 我想使用绘
  • 如何将 asm 着色器编译为 fxo 文件?

    我有一个已编译的 fxo 着色器 我正在尝试对其进行稍微编辑 仅调整一些常量 使用 fxdis https code google com archive p fxdis d3d1x https code google com archiv

随机推荐

  • 运行 sonarrunner 时未找到类错误

    我收到类未找到错误 该类无法通过类加载器访问 并且从 gradle 运行 sonarrunner 时会提示错误 这些类作为依赖项包含在 gradle 的编译时 并且 gradle 构建工作正常 如何为声纳包含这些类 14 53 24 322
  • 如何处理多个xml标准? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在尝试将一组本地包装类写入我们的机构 API 我在一所高等教育机构工作 这些
  • Android 无法加载本地 libcrypto 未满足的链接错误

    我需要在我的应用程序中运行比操作系统中版本更新的 openssl 版本 我能够修补和 Android 源代码以编译较新的版本 然后提取共享库以在我的应用程序中使用 然后 我能够编译并链接我的本机代码 该代码仅需要较新版本的 openssl
  • 部署具有所有包依赖项的 Python Cloud Function

    我想部署一个不依赖于使用 requests txt 来安装软件包的云功能 我希望这些包可以在存储中使用 或者作为功能的一部分进行压缩和上传 这可能吗 编辑 2019 年 6 月 14 日 基本上我想用我的代码发送 numpy 和 panda
  • 使用 Node.js 在 html 表中显示 mysql

    我正在学习如何将node js 与mysql 一起使用 我试图找到一些好的文档 但徒劳无功 我现在可以在浏览器中显示 mysql 数据 但我想在某个时候通过我的 index html 和 css 文件来处理它 这是我的 app js mod
  • 如何在 iframe 的本地范围内执行注入的 javascript 代码?

    我在 iframe 中加载了一个 html 文档 我已经用 javascript 为该文档开发了一些弹出菜单代码 并将代码从主文档注入到 iframe 中 但我的代码在 iframe 中不起作用 因为它使用了 document 对象 令人惊
  • 如何覆盖 UISearchDisplayController searchResult TableView 中的“无结果”文本?

    我不想在我的服务器处理搜索查询时显示 无结果 文本 我找出了包含标签的表格单元格的确切坐标 并尝试覆盖它 self noResultsCoverView UIView alloc initWithFrame CGRectMake 0 0 4
  • DocumentFilter 的正则表达式可以匹配所有十进制数字,也可以匹配末尾只有一个小数的数字

    先问问题 我需要正则表达式来匹配111 or 111 or 111 111 只是任意数字 DocumentFilter 我需要用户能够输入111 with a decimal之后什么也没有 似乎无法正确处理 我发现所有正则表达式都匹配all
  • 正则表达式中间的前瞻不匹配

    我有一根绳子 s1 a b 我想匹配这个字符串但只捕获字母 我尝试使用前瞻 if s1 a z a z print Captured 1 2 n 但这似乎与我的字符串不匹配 我已经通过使用解决了原来的问题 相反 但我很好奇为什么我最初的尝试
  • 如何将在Python中创建/更新的Google工作表保存到特定文件夹?

    我有这个代码 from google colab import auth auth authenticate user import gspread from oauth2client client import GoogleCredent
  • 如果struct A嵌入到B中,A上的方法可以访问B的方法和字段吗?

    struct A func a A BName id int string return a Name struct B A Name string func main b B Name abc fmt Println b Name 代码失
  • 如何快速使用prepareForSegue?

    我有一个带有名为 BasicPhrasesVC 的表视图的 ViewController 我想传递所选单元格中的数据以将其显示在下一个 ViewController 称为 BasicPhrasesVC 上 class BasicPhrase
  • 如何将 n*1 矩阵转换为 n*n 对角矩阵

    我有一个 nx1 矩阵我想将其转换为 R 中的 nxn 对角矩阵 正如 Ben Bolker 所建议的 您可以简单地使用定义您的单位矩阵diag my matrix lt diag 0 25 4 my matrix 1 2 3 4 1 0
  • 如何使用多个隔离来服务请求

    如何设置 Dart 服务器以使用所有可用核心来处理即将到来的请求 例如 通过使用多个隔离来服务请求 Use the shared true的论证HttpServer bind 例子 import dart io import dart is
  • 切换大小写表达式

    考虑一个表达式 1 AB CD 1 这个表达式的解法是什么 上面的表达式是C语言中的一个switch表达式 2 AB CD gt 2 ABCD gt 之后我应该做什么 下面是代码片段 include
  • 在注释中使用属性值? [复制]

    这个问题在这里已经有答案了 我的一个项目中有这个带注释的课程 注释类是我定义的 问题 我可以代替字符串吗 TP REPORT 使用一些财产它的值在编译时不知道而只能在运行时知道 PhoenixTable tableName TP REPOR
  • 交换的替代版本!还返回换出的值

    我在 IRC 上谈过这个问题 clojure今天的频道 但想在这里进行更详细的介绍 基本上 为了更好地理解原子 swap deref和 Clojure 并发作为一个整体 我想尝试编写一个函数 它不仅返回使用交换的值swap 还有被换出的值
  • 从 iPhone 应用程序启动 Google 地图应用程序。

    我正在尝试从我的 iPhone 应用程序启动谷歌地图 启动部分工作正常 但自从 iPhone 3 1 更新后 我认为是在这个时候 我得到了美国和加拿大的缩小地图 而不是放大我当前的位置 最初一切都工作正常 但有时更新后一切都停止正常工作 这
  • Facebook 是 openid 提供商吗?

    我对 facebook 以及 facebook 是否是像谷歌这样的 openid 提供商感到困惑 根据这个链接 http developers facebook com blog post 246 facebook 是一个 openid 依
  • 具有固定层数的渐变

    我画了一组四边形 对于每个四边形 我在其顶点都有一个定义的颜色 例如 现在我的四边形集看起来像 我以相当原始的方式实现了这样的结果 只需将其作为四边形每个顶点的属性颜色传递到顶点着色器即可 我的着色器非常简单 顶点着色器 version 1