dFdxFine 和 dFdxCoarse 之间的区别

2023-12-26

来自 OpenGL 文档:

dFdxFine 和 dFdyFine 使用基于当前片段及其直接邻居的 p 值的局部差分来计算导数。

dFdxCoarse 和 dFdyCoarse 使用基于当前片段邻居的 p 值的局部差分来计算导数,并且可能但不一定包括当前片段的值。也就是说,在给定区域上,该实现可以在比相应 dFdxFine 和 dFdyFine 函数所允许的更少的唯一位置中计算导数。

它们之间有什么区别呢?我什么时候应该关心?

我知道两者都计算关于窗口坐标的值的导数,但我不明白用于计算它们的方法。

我猜它们都是在硬件中实现的,但是你能发布 dFdx 伪代码实现吗?


来自 GLSL 规范:

通常考虑 2x2 正方形的片段或样本,并计算独立的dFdxFine每行且独立dFdyFine每列,同时只计算一个dFdx粗略和一个单一的dFdy 粗调整个 2x2 正方形。

基本上,导数的计算方式是通过数值微分。为了简单起见,假设我们正在渲染到单采样帧缓冲区,并假设我们想要计算dFdx(a)。然后,通常会同时对 2x2 正方形的相邻片段进行着色(即在同一工作组内):

    a00  a10
    a01  a11

从概念上讲,所有着色器调用都会计算它们的值a,将其写入共享内存,并发出屏障。然后,在障碍之后,导数可以近似为:

dFdxFine(a) = (a10 - a00)/dx       at xy = 00, 10
dFdxFine(a) = (a11 - a01)/dx       at xy = 01, 11

对于粗略导数,规范明确允许仅计算整个 2x2 像素块的一个导数。因此,符合要求的实现也可以计算:

dFdxCoarse(a) = (a10 - a00)/dx     at xy = 00, 10, 01, 11

两者之间的性能是否存在差异取决于硬件。如果它们确实在您的硬件上返回不同的结果,那么“粗略”版本应该更快。然而,通常您不应该关心这些功能。只需使用dFdx and dFdy变体,使用实现默认变体(精细或粗略)。

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

dFdxFine 和 dFdxCoarse 之间的区别 的相关文章

  • 着色器/矩阵问题 - 看不到对象

    我试图在屏幕上放置一个立方体并点亮它 我想要在立方体上添加 phong 阴影 当我运行代码时 我可以看到背景图像 但看不到立方体 我相当确定立方体本身是正确的 因为我已经设法用纯色着色器显示它 我已经设法编译着色器程序 但我根本看不到立方体
  • OpenGL 将着色器附加到程序

    有没有办法访问附加到程序的着色器 也就是说 给定一个程序 我可以做类似的事情 vertexShader getVertexShaderFromProgram program 我想在验证我的程序的函数中记录着色器编译状态 但我只保留对程序的引
  • 静态链接库时出现 glew 链接器错误

    我正在尝试在 Visual Studio 2012 中构建一个 opengl 项目 我想静态包含 glew 库 因此我从源代码构建它并将生成的 glew32sd lib 复制到我的 lib 目录 我将此 lib 路径提供给 Visual S
  • Opengl 非同步/非阻塞地图

    我刚刚找到以下内容OpenGL 规范ARB map buffer range http www opengl org registry specs ARB map buffer range txt 我想知道是否可以使用此扩展进行非阻塞地图调
  • 交错顶点提交如何提高性能?

    我已经阅读并看到了其他问题 这些问题通常都指向将顶点位置和颜色等交错到一个数组中的建议 因为这可以最大限度地减少从 cpu 发送到 gpu 的数据 我不清楚的是 即使使用交错数组 您仍然必须对位置和颜色指针进行单独的 GL 调用 OpenG
  • 没有着色器的 OpenGL

    我已经阅读了一些教程来编写以下代码 唯一的区别是原始教程使用 SDL 而不是 GLEW 我不明白这段代码有什么问题 它可以编译 但我没有看到三角形 教程也没有使用着色器 include
  • 哪个对缓存最友好?

    我试图很好地掌握面向数据的设计以及如何在考虑缓存的情况下进行最佳编程 基本上有两种情况我无法完全确定哪个更好以及为什么 是拥有一个对象向量更好 还是拥有对象原子数据的多个向量更好 A 对象向量示例 struct A GLsizei mInd
  • OpenGL 的每个组件 alpha 通道?

    是否可以使用 OpenGL 对每个组件使用一个 alpha 通道 一个用于红色 一个用于绿色 一个用于蓝色 进行混合 如果没有 有哪些可能的解决方法 这不是直接支持的东西 不过 您自己实现起来相当容易 使用 3 通道 alpha 纹理渲染三
  • 如何用opengl制作2D地形?

    我想制作一个简单的二维地形 只有一些颠簸和高度变化 我想过只使用随机数来描述某个顶点的高度 但我不知道如何从中制作一个网格 我正在寻找一种方法来查找地形的顶点和索引缓冲区 我该怎么做呢 您可以仅将 GL POLYGON 与所有顶点的列表一起
  • OpenGL 和加载/读取 AoSoA(混合 SoA)格式的数据

    假设我有以下 AoSoA 格式的简化结构来表示顶点或点 struct VertexData float px 4 position x float py 4 position y 也就是说 每个实例VertexData存储4个顶点 我见过的
  • 使用 glDrawElements 时在 OpenGL 核心配置文件中选取三角形

    我正在使用 glDrawElements 绘制三角形网格 并且希望能够使用鼠标单击来拾取 选择三角形 三角形的网格可以很大 在固定功能 OpenGL 中 可以使用 GL SELECT http content gpwiki org inde
  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • 不理解 gluOrtho2D 函数

    我不能做什么gluOrtho2D 函数是做什么的 是否将原点固定在 OpenGL 窗口上的某个特定点或其他位置 这是因为gluOrtho2D 1 1 1 1 将原点固定在窗口的中间 如果它在某个时刻没有修复原点 那么有什么方法可以修复原点
  • lwjgl 3 , glUniformMatrix4 导致 jre 崩溃

    我正在使用 lwjgl 3 并学习现代 opengl 3 我想将统一矩阵发送到顶点着色器 以便我可以应用转换 我尝试过 但程序因此错误而崩溃 A fatal error has been detected by the Java Runti
  • lnk1104:无法打开“LIBC.lib”链接

    使用 GLee 将着色器写入我的 OpenGL 项目并编译后 我收到了错误LNK1104 cannot open file LIBC lib 我尝试按照其他人的建议添加它并忽略它 但没有解决问题 有没有其他方法可以解决我错过的这个问题 以下
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • glut 库中缺少 glutInitContextVersion()

    我正在练习一些 opengl 代码 但是当我想通过以下方式强制 opengl 上下文使用特定版本的 opengl 时glutInitContextVersion 它编译过程失败并给出以下消息 使用未声明的标识符 glutInitContex
  • GLSL 中的二阶函数?

    我正在寻找一种方法来使用一个函数作为 GLSL 中另一个函数的参数 在常规 C 中 可以通过传递函数指针作为函数参数来模拟它 似乎其他语言 如 HLSL 现在提供了处理高级构造 如高阶函数 的方法 或者可以使用以下命令来模拟它们巧妙利用 H
  • WebGL - 如何传递无符号字节顶点属性颜色值?

    我的顶点由具有以下结构的数组组成 Position colour float float float byte byte byte byte 传递顶点位置没有问题 gl bindBuffer gl ARRAY BUFFER this vbo
  • OpenGL - 两个纹理的幂

    OpenGL 使用二次幂纹理 这是因为由于 MipMapping 某些 GPU 只接受 2 的幂纹理 当绘制比实际更大的纹理时 使用这些二次方纹理会导致问题 我想到了一种方法来解决这个问题 即仅在我们使纹理小于实际大小时使用 PO2 比率

随机推荐

  • 正则表达式的含义如 - \\d , \\D, ^ , $ 等 [重复]

    这个问题在这里已经有答案了 这些表达的意思是什么 我在哪里可以了解它们的用法 d D s S w W t n etc 我需要使用stringr包 我完全不知道如何使用这些 From regexp 在里面扩展正则表达式部分 插入符号 和美元符
  • 子查询上的 Groupwise MAX()

    我正在尝试计算返回表中的最大值以及该表中的其他值 然而 我正在执行此操作的表不是 真正的 表 它是由子查询生成的表 这给我带来了问题 因为我认为在不重新指定整个子查询的情况下我无法连接它两次 我目前有一个 SQL Server 解决方案 使
  • React中继injectNetworkLayer不是一个函数

    我正在遵循 lynda 的教程 构建和部署全栈 React 应用程序 在 注入中继网络层 一章中 在index js中 尝试设置网络层 程序编译成功 但我在浏览器中收到以下错误 类型错误 WEBPACK IMPORTED MODULE 4
  • com.google.cloud.pubsub.spi.v1.Publisher.publish 未将数据发送到 PubSub

    对新版本的调用com google cloud pubsub spi v1 Publisher publish pubsubMessage get 永远挂着 我不确定问题是什么 代码片段 com google cloud pubsub sp
  • Dialogflow,从音频中检测意图

    我正在尝试将音频文件发送到对话流 API 进行意图检测 我已经有一个工作得很好的代理 但只能处理文本 我正在尝试添加音频功能 但没有成功 我正在使用此页面中提供的示例 Java https cloud google com dialogfl
  • Visual Studio 2017 中的 SSIS 工具箱缺少某些组件

    我在用Visual Studio Community 2017用于开发 SSIS 包 我使用 SQL Server 2016 某些组件不在 SSIS 工具箱中 这就是我现在拥有的 这是我的大学所拥有的 他们没有与我相同版本的 Visual
  • 如何在 Excel 中使用 VBA 从 SQLite 数据库检索数据?

    我正在使用 ADO 从 VBA 连接到 db 文件 遵循此问题的答案question https stackoverflow com questions 42509154 accessing a sqlite database in vba
  • 无法更改 Visual Studio 代码设置

    我尝试更改 Visual Studio 代码设置 但无法编辑任何内容 我应该怎么办 我想将编码设置为 files encoding ISO 8859 1 这些是我使用的步骤 1 Ctrl Shift p 打开命令面板2 搜索设置并单击首选项
  • onPrepareOptionsMenu 切换菜单项时如何刷新 ActionBar?

    在我的应用程序中 我经常启用 禁用菜单条目 并让它们从 onPrepareOptionsMenu 中可见 今天 我开始向我的一些 Android 2 x 应用程序添加 android showAsAction 菜单属性 以显示 Action
  • Grails 服务器发送事件

    我需要让服务器发送事件与 Grails 一起工作 我觉得我已经很接近了 但只是还不够 JavaScript 请求成功到达控制器 但每次都会抛出错误 它每隔 2 秒左右重试一次 可能是由于错误 当服务器的会话计时器低于 5 分钟时 我需要向用
  • CFML 使用哪个版本的 Hibernate?

    The 休眠文档 http hibernate org orm documentation 有时指不同版本之间的差异 ColdFusion 10 使用哪些版本的 Hibernate ColdFusion 9 中也是这样吗 Railo 稳定版
  • 无法使用 Nest.js 设置 cookie

    我创造了 sign in端点基本上返回带有 2 个令牌的对象 刷新令牌和访问令牌 Post sign in signIn Body signInUserDto SignInUserDto Promise
  • 使用 ASP.NET (C#) 在页面之间传递变量,而不使用 QueryString

    寻求有关在不使用 QueryString 的情况下在页面之间传递变量的建议 诸如 Google 之类的网络爬虫会捕获 URL 中的查询字符串 我正试图摆脱使用它 是否有另一种建议的方法来传递变量 我考虑过使用会话变量 但这只是为了简单地将变
  • VS2010 和 VS2012 之间的二进制 C++ 库兼容性?

    我对 VS2010 和 VS2012 之间编译库的二进制兼容性感到困惑 我想迁移到 VS2012 但是许多闭源二进制 SDK 仅适用于 VS2010 例如用于连接硬件设备的 SDK 传统上 据我所知 Visual Studio 对编译器版本
  • 根据 python pandas 中的行值合并两个数据框

    我在 pandas 中有两个数据框 如下所示 df1 df2 Column1 Column2 Column3 ColumnA ColumnB ColumnC 0 a x x 0 c y y 1 c x x 1 e z z 2 e x x 2
  • BigInteger.valueOf() 对于非常大的数字?

    在 Java 中将 50 位字符串转换为 BigInteger 的最佳方法是什么 它没有 valueOf String 方法 而且我无法转换为 Long 因为它太小了 它确实有一个BigInteger String http java su
  • 调暗/模糊父布局背景

    这里有与上面主题相同的问题 但没有得到答案 我这里有一个布局 我需要在顶部布局中使用与底部布局相同的图像 但具有模糊样式 设置 alpha 没有帮助 文本视图也会影响 如何模糊向下布局的背景 此处为 XML
  • Windows 任务调度程序用于调度代码重复运行的可靠性如何?

    我有一些代码需要驻留在 Windows Server 2003 计算机上并每分钟运行一次 建议的处理方法是什么 是否可以将其设计为控制台服务并让任务调度程序每分钟都执行它 这可能吗 我应该把它吸收并把它写成一个 Windows 服务吗 由于
  • 有没有办法测量重复代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种与语言无关的代码复制工具 找到特定于语言的代码重复工具 适用于 Java C PHP 很
  • dFdxFine 和 dFdxCoarse 之间的区别

    来自 OpenGL 文档 dFdxFine 和 dFdyFine 使用基于当前片段及其直接邻居的 p 值的局部差分来计算导数 dFdxCoarse 和 dFdyCoarse 使用基于当前片段邻居的 p 值的局部差分来计算导数 并且可能但不一