了解 dFdX 和 dFdY 的基础知识

2024-02-11

我读过很多关于行为的描述dFdX(n) and dFdY(n)并且相信我仍然能够掌握学校的偏导数。我不明白的是,在最简单的示例中,“n”来自哪里?

读取glsl内置函数dFdx(n) and dFdy(n)除了数学之外,没有任何背景,我会将它们解释为“我有一些 x 和 y 的函数:f(x,y),我对该函数求偏导数。x d/dx(x,y),并且我评估偏导数公式的某个值x and y我假设是输入参数n above.

我读过很多关于如何进行的描述dFdx() and dFdy()允许您找到输出片段的窗口空间梯度。输出片段的情况是我目前最感兴趣的,因为我not尝试确定纹理坐标相对于纹理光栅化方式的变化率。

我正在寻找使用dFdx(n) and dFdy(n)找到输出片段的窗口空间颜色梯度。我不完全理解如何在心里构造被微分的函数以及它与帧缓冲区的关系以及如何n与此相关(例如n与当前片段的 2x2 片段邻域、整个帧缓冲区的窗口坐标空间相关,以便我评估该值的梯度,其他)?

我希望输入类型n对这个问题的任何回答都是一个标量(浮点数),我们只讨论一个维度,dFdx(),以简化讨论。


让我们检查一下man page https://www.opengl.org/sdk/docs/man/html/dFdx.xhtml:

genType dFdx(     genType p);

genType dFdy(     genType p);

这些函数仅在片段着色器中可用,返回 表达式 p 关于窗口 x 的偏导数 坐标(对于 dFdx*)和 y 坐标(对于 dFdy*)。

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

dFdxCoarse 和 dFdyCoarse 使用局部计算导数 根据当前片段的 p 值进行差异 邻居,并且可能但不一定包括该值 对于当前片段。也就是说,在给定的区域内, 实现可以在更少的唯一位置计算导数 将允许相应的 dFdxFine 和 dFdyFine 功能。

dFdx 返回 dFdxCoarse 或 dFdxFine。 dFdy 返回 dFdyCoarse 或 dFdyFine。实现可以选择哪个 根据性能或性能等因素执行计算 API GL_FRAGMENT_SHADER_DERIVATIVE_HINT 提示的值。

暗示高阶导数的表达式,例如 dFdx(dFdx(n)) 具有未定义的结果,混合阶导数也是如此,例如 dFdx(dFdy(n))。假设表达式 p 是连续的并且 因此,通过非均匀控制流评估的表达式可能是 不明确的。

专注于 Fine 变体。当每个片段进程到达 dFd* 调用时,GPU 将收集传入的值并基于这些值,通常是通过获取相邻值之间的差异并除以片段大小。

换句话说,片段着色器已经计算出F(x,y)并将其传递给 GPU 以收集它们,并根据其旁边的片段传回 dFdXF(x+e, y)

GenType意味着您可以在其中放入浮点数,您也可以传入 vec4 并获取组件方面的 dFd* 值。

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

了解 dFdX 和 dFdY 的基础知识 的相关文章

  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • OpenGL - 两个纹理的幂

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

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 三角形纹理映射OpenGL

    我正在开发一个使用 Marching Cubes 算法并将数据更改为 3D 模型的项目 现在我想在 OpenGL 中为我的 3D 模型使用纹理映射 我首先尝试了一个简单的示例 它将图片映射到三角形上 这是我的代码 int DrawGLSce
  • 使用 JOGL 和 Android OpenGL 编写可移植 Java 应用程序

    我计划编写一款可以在 PC 和 Android 上运行的 Java 3D 游戏 不幸的是 这两个平台似乎没有通用的 OpenGL API API 是否有显着差异 有没有办法在两个版本中使用相同的 3D 代码 这是不是一个好主意 Androi
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • OpenGL,如何独立旋转对象?

    到目前为止我的代码 void display void glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT Clear Screen And Depth Buffer glLoadIdentity
  • 如何在不使用 Kinect SDK 函数的情况下将深度空间中的点转换为 Kinect 中的颜色空间?

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

    我一直在寻找将属性与任意顶点分组关联起来的方法 起初似乎是我实现这一目标的唯一方法 但后来我偶然发现了这个问题 https stackoverflow com questions 14169228 opengl single vertex
  • wglCreateContextAttribsARB 函数崩溃

    我尝试写下代码 我有InitializeOGL 的代码 bool Ogl InitializeOGL bool vSync cout lt lt Init OpenGL lt
  • 将四个字节打包到一个浮点中

    我正在编写一个着色器 HLSL 我需要将颜色值打包为 R32 格式 我找到了用于将浮点数打包为 R8G8B8A8 格式的各种代码 但它们似乎都不能反向工作 我的目标是 SM3 0 所以 据我所知 位操作不是一个选项 总而言之 我需要能够做到
  • 为什么 OpenGL 有远裁剪平面,以及使用什么惯用法来处理这个问题?

    我一直在学习 OpenGL 持续困扰我的一个话题是远裁剪平面 虽然我可以理解近剪裁平面和侧剪裁平面 它们永远不会产生任何实际效果 因为它们之外的对象无论如何都不会被渲染 背后的推理 但远剪裁平面似乎只是一个烦恼 由于 OpenGL 背后的人
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • 云或烟雾的粒子系统

    我正在尝试使用 OpenGL 和 CUDA 制作一个简单的用于云和烟雾模拟的粒子系统 如何使粒子系统中的粒子表现得像真正的云或烟雾在低湍流风中的表现 我现在遇到的一些问题是 颗粒聚集成一个大球 粒子扩散到无限远 粒子突然弹射离开 我已经完成
  • LibGDX纹理混合与OpenGL混合功能

    在 libGdx 中 我试图创建一个成形纹理 采用完全可见的矩形纹理并将其遮罩以获得成形纹理 如下所示 在这里我在矩形上测试它 但我想在任何形状上使用它 我调查过本教程 http www learnopengles com tag addi
  • 移动/调整大小期间 opengl 窗口冻结

    我正在使用 LWJGL 开发游戏 移动窗口时 计划将来添加调整大小代码 渲染循环冻结 我希望它在移动时继续以某种方式运行 LWJGL 不包括 glutMainLoop Display属于OpenGL 而不是Java 相关代码 regular
  • 如何计算正切和副法线?

    谈谈OpenGL着色语言 GLSL 中的凹凸贴图 镜面高光之类的东西 I have 顶点数组 例如 0 2 0 5 0 1 0 2 0 4 0 5 法线数组 例如 0 0 0 0 1 0 0 0 1 0 0 0 世界空间中点光源的位置 例如
  • glDeleteTextures在Windows上似乎没有释放纹理内存,有没有解决办法?

    我的 openGL 应用程序内存不足 遇到一些问题 我正在尝试找出我的问题 为此 我创建了一个小型测试程序 它基本上只是从调用 glDeleteTextures 的文件中加载一个巨大的纹理 然后再次加载它 如果我在 OSX 上运行这个测试程
  • 为什么我的 CAOpenGLLayer 更新速度比之前的 NSOpenGLView 慢?

    我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序 最初它渲染到 NSOpenGLView 然后我将其更改为渲染到 CAOpenGLLayer 子类 当我这样做时 我看到了巨大的性能损失 帧速率减半 鼠标响应能力降低 卡顿

随机推荐

  • 设置 dbt 日期变量

    我试图将 dbt 模型中的日期变量设置为 7 天前的日期 该模型将针对 Redshift 数据库运行 我已执行以下操作来设置变量 但是收到错误 DATE ADD 未定义 set start date TRUNC DATE ADD day 7
  • python pycparser设置错误

    我在 CentOS 7 上通过 pip 设置 pyparser 时看到以下错误 usr bin python2 u c import setuptools tokenize file tmp pip build PMzCYU pycpars
  • GMSAutocompleteViewController iOS,如何更改搜索栏中的文本颜色[重复]

    这个问题在这里已经有答案了 我正在使用 GMSAutocompleteViewController 并想要更改 searchBar 中的 textColor 但找不到方法 我设法更改了一些颜色但没有更改 searchBar 文本 我尝试过以
  • hostconfig.json 在哪里(Docker 桌面 + WSL2 环境)

    据我所知 docker不支持任何在创建容器后更改端口映射的命令 但这个答案说 通过更改 hostconfig json 文件 我可以更改端口映射 如何将端口映射分配给现有的 Docker 容器 https stackoverflow com
  • `System.currentTimeMillis()` 在多个进程中是否正确?

    我们遇到这样的情况 主进程写入日志 然后它会生成多个工作进程 这些进程会写入自己的日志 我希望工作人员通过主服务器登录 但由于某种原因 这个想法遭到了抵制 我想知道的是 我可以相信多个文件中最终的时间戳彼此一致吗 即 如果我将日志文件合并为
  • 让 WiX/Burn 检测所需的 .NET Framework 版本

    我怎样才能拥有Burn http en wikipedia org wiki WiX Burn检测是否安装了所需的 NET 4 5 框架 如果没有在启动自定义 UI 之前通知用户该安装需要 NET 4 5 才能运行 如果没有先决条件检查 我
  • 当我使用 Chutzpah.json 文件时,使用 Chutzpah 运行测试时出现问题

    当我提供 Chutzpah json 文件时 我在让 Chutzpah 运行我的打字稿测试时遇到问题 我的项目如下所示 我的 Chutzpah json 文件如下所示 Compile Mode External ExtensionsWith
  • 透明视图上的 UITapGestureRecognizer

    我有一个带有视图的树 其中最高级别的视图是透明的 并且包含图像或标签 具有透明背景 将 UITapGestureRecognizer 附加到此视图时 我仅收到有关包含图像的视图的通知 另外 如果我将视图留空 那么仅当背景颜色与 UIColo
  • “按 Enter 开始游戏” XNA 简介屏幕

    我创建了一个介绍屏幕 其中包含 按 Enter 开始游戏 然后退出 当然退出没有问题 但让游戏开始有点困难 有什么建议吗 最简单的方法是设置状态机 看起来真的很简单 enum GameState TitleScreen 0 GameStar
  • 如何从 Fluent-ffmpeg 传输到 AWS s3?

    我想 const passthroughStream new PassThrough ffmpeg stream audioBitrate 8 output passthroughStream end true on progress p
  • 如何编辑dll档案?

    好吧 所以我对 DLL 不太了解 但我需要编辑其中一些 那些看起来像存档文件的文件 如 firefox的xul dll windows twain 32 dll 当我尝试在 NET Reflector 中打开它们时 它无法打开它们 这里的一
  • 从 csv 文件加载约束(amazon deequ)

    我正在查看 Deequ 它看起来是一个非常好的图书馆 我想知道是否可以从 HDFS 中的 csv 文件或 orc 表加载约束 假设我有一张包含这些类型的表 case class Item id Long productName String
  • 在线性模型中结合cbind和paste

    我想知道我怎样才能想出一个lm公式语法使我能够使用paste和 一起cbind用于多元多元回归 Example 在我的模型中 我有一组变量 对应于下面的原始示例 data mtcars depVars lt paste mpg disp i
  • 如何将列表转换为每行包含 N 个项目的 CSV 文件?

    我想创建一个新的 CSV 文件 每行包含 3 个项目 我的源文件如下所示 没有新行 换行符 12123 1324 232324 243443 234 2345 2334 2445 22355 222234 2345 现在我想将此文件转换为
  • PHP 数组语法解析错误左方括号“[”[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个返
  • 将 Base64 转换为 png 并保存在设备中 React Native Expo

    我一直在尝试使用 React Native 和 Expo 在移动设备上保存图像 我尝试过这些软件包 import RNFetchBlob from react native fetch blob import RNfs from react
  • .png 图像在 IE7、IE8 中无法正确呈现

    它们在 FF Safari 中看起来很棒 但社交媒体图标在 IE 中无法正确呈现 http www erisdesigns net STAGE ED1 3 http www erisdesigns net STAGE ED1 3 这是 IE
  • bean 的会话范围在 Spring MVC 应用程序中如何工作?

    我对 Spring MVC 还很陌生 我对会话范围一颗豆子 进入一个项目我有一个Cart豆子 这个 Component Scope value WebApplicationContext SCOPE SESSION proxyMode Sc
  • 找不到类型或命名空间名称“DbContext”[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 ASP NET MVC 3 非常陌生 并且很难解决 Visual Studio 中的构建错误 找不到类型或命名空间名称 DbCo
  • 了解 dFdX 和 dFdY 的基础知识

    我读过很多关于行为的描述dFdX n and dFdY n 并且相信我仍然能够掌握学校的偏导数 我不明白的是 在最简单的示例中 n 来自哪里 读取glsl内置函数dFdx n and dFdy n 除了数学之外 没有任何背景 我会将它们解释