opengl dfdx dfdy
本文是关于偏导数函数dfdx、dfdy的个人实验理解,如有错误,请各位留言指正!
参考文档:
https://segmentfault.com/a/1190000019681666?utm_source=tag-newest
https://blog.csdn.net/herramadeus/article/details/21037503
个人认为偏导数是一个物体空间坐标与物体所渲染的屏幕坐标的一个比值。请看下面具体的验证。
顶点着色器:
#version 430 corelayout(location = 0) in vec4 vPosition;layout(location = 1) in vec2 UV;layout(location = 0) uniform mat4 MVP;out vec2 texUV;void main(){ texUV = UV;gl_Position = MVP*vPosition; }
片段着色器:
#version 430 corelayout(location = 1) uniform float fdx;in vec2 texUV;out vec4 fColor;void main(){ float dp = 100.0;dp = dFdx(texUV).x;//根据偏导数数值进行渲染 因为浮点精度问题,不能直接相等//UV的宽度为1if(dp >= fdx-0.0001 && dp <= fdx + 0.0001 ){ fColor = vec4(0.0, 0.0, 1.0, 1.0); }else {fColor = vec4(1.0, 0.0, 0.0, 1.0); }}
程序设置:
//平面的空间坐标GLfloat vertices[NumVertices][3] = {{ -0.5f, -0.5f, 0.0f},{ 0.5f, -0.5f, 0.0f},{ 0.5f, 0.5f, 0.0f},{ -0.5f, 0.5f, 0.0f},};//平面的UV坐标GLfloat uv[NumVertices][2] = {{ 0.0f, 0.0f},{ 1.0f, 0.0f},{ 1.0f, 1.0f},{ 0.0f, 1.0f}};glViewport(0, 0, 500, 500);vmath::mat4 modelView = vmath::mat4::identity(); modelView = vmath::frustum(-1.0, 1.0, -1.0, 1.0, 1.0, 100) * vmath::translate(0.0f, 0.0f, -1.0f);glUniformMatrix4fv(0,1,false,modelView);//平面处于视锥近平面上,近平面上下宽高为2,平面宽高为1,视口宽高为500,平面渲染宽高为250//UV的宽高为1,UV的偏导数应为1.0/250.0glUniform1f(1, 1.0/250.0f);
物体渲染受平移,旋转,缩放的影响,分别进行测试。
平移/绽放:
modelView = vmath::frustum(-1.0, 1.0, -1.0, 1.0, 1.0, 100) * vmath::translate(0.0f, 0.0f, -2.0f);//modelView = vmath::frustum(-1.0, 1.0, -1.0, 1.0, 1.0, 100) * vmath::translate(0.0f, 0.0f, -1.0f)// * vmath::scale(0.5f,0.5f,0.5f);glUniformMatrix4fv(0,1,false,modelView);//远离(缩小)了一倍,渲染宽高应为125glUniform1f(1, 1.0/125.0);
旋转:
vmath::mat4 modelView = vmath::mat4::identity(); modelView = vmath::frustum(-1.0, 1.0, -1.0, 1.0, 1.0, 100) * vmath::translate(0.0f, 0.0f, -1.0f) * vmath::rotate(60.0f, 0.0f, 0.0f, 1.0f); glUniformMatrix4fv(0,1,false,modelView);//斜向上还是250个像素,一个UV单位,60度的旋转,投影到水平是0.5glUniform1f(1, 0.5/250.0);
以上纯属个人见解!!
Note that the functions dFdx, dFdy, fwidth, and their Coarse and Fine variations will return 0, when given a constant expression as an argument.
opengl dfdx dfdy相关推荐
- 关于dFdx/dFdy的实现
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 参考:https://stackoverflow.com/questions/28246413/unde ...
- Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线
文章目录 ddx, ddy 说明 DirectX - ddx, ddy OpenGL - dFdx, dFdy 伪代码表示 可用它来做什么 简单的边缘突出应用 Shader 边缘突出-锐化-增加差值 ...
- dFdy dFdx如何理解
dFdy dFdx这两个函数如何理解 笔者更倾向认为这是一个glsl预编译时处理的一个宏,类似c语言的sizeof the opengl shading language 4.4是这么描述这两个函数的 ...
- 两个空间点直接距离投影公式_HBAO(屏幕空间的环境光遮蔽)
别的不多扯,直接进入正题,HBAO全程Image-space horizon-based ambient occlusion 对于屏幕上的像素点P,HBAO算法通过以下几个步骤来计算它的环境光遮蔽 1 ...
- Vulkan 预旋转处理设备方向
使用 Vulkan 预旋转处理设备方向 本文介绍了如何通过实现预旋转来有效地处理 Vulkan 应用程序中的设备旋转. Vulkan允许您指定比 OpenGL 更多的有关渲染状态的信息.伴随着这种力量 ...
- WebGL1.0 常用API及参数
WebGL Specifications (khronos.org) 类型以及对象定义 样例 ```js 234234234234 这部分内容主要定义一部分类型和数据结构. ``` 这部分内容主要定义 ...
- 深度学习与计算机视觉(四)反向传播及其直观理解
四.反向传播及其直观理解 4.1 引言 问题描述和动机: 大家都知道,其实我们就是在给定的图像像素向量x和对应的函数f(x)f(x)f(x),然后我们希望能够计算fff在x上的梯度∇f(x)" ...
- 考研数学一基础技巧题汇总
本篇博客里博主总结了历年真题.模拟题中容易忽视的基础与技巧: 轻装上阵很重要!希望大家熟练掌握以下每个知识点. 本篇博客侧重于基础部分,同时还有一些不常考,但考题很简单的知识点. 但是考研数学题的思路 ...
- (九)unity自带的着色器源码剖析之——————UnityShadowLibrary.cginc文件分析(实时阴影和烘焙阴影、阴影淡化、阴影渗漏处理、PCF阴影过滤解决实时阴影锯齿)
一.阴影与全局照明系统的关系 Unity3D引擎可以根据宏SHADOWS_SCREEN和LIGHTMAP_ON是否启用决定是否在全局照明系统下对阴影进行混合处理.如果这两个宏同时启用,则HANDLE_ ...
最新文章
- python入门看什么书-请问初学者学Python看那本书?
- 变阻尼汽车悬架振动自适应控制方法分析
- 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
- why carbon 13?
- 动态规划之----最长公共子序列
- [原理篇] Soft Regression
- 在Windows 7 下使用Visual Studio 2010 编写自动申请管理员权限运行的程序
- 机器学习实践:TensorFlow最后一个epoch训练损失函数显著增大
- PowerShell变量——PowerShell三分钟(七)
- web developer tips (78):使用文档大纲导航
- Windows 网络无法ping通的解决方法
- ansile(2)模块之get_url
- webapp,ios Safari打开新窗口
- 【渝粤教育】电大中专电子商务网站建设与维护 (17)作业 题库
- Server-Side Timestamping in the Audit Trail System (XAF时间戳在审核中的应用代码)
- 【java】详解native方法的使用
- 2021年低压电工模拟考试题库及低压电工作业考试题库
- Leetcode有效数独的Python解法
- 问题描述-缺少关键字KeyError Traceback (most recent call last) <ipython-input
- 通过JavaScript中基于属性的TDD的钻石方块
热门文章
- GSMA TAC核发及IMEI编码规则
- 报表开发工具 Stimulsoft Reports V2022.3.5系列发布!
- 转载:24岁,我终于有了我自己的公司(一个深圳创业者故事)
- react-router如何配置可选参数
- IntelliJ inspection gives “Cannot resolve symbol“ but still compiles code
- 怎么删除win10的系统更新服务器,教你怎么永久删除Win10更新助手(Update Assistant)...
- app启动速度优化实践
- Unity超链接:支持点击事件,下划线以及自定义颜色
- [PyTorch]手动实现logistic回归(只借助Tensor和Numpy相关的库)
- oracle数据库本地连接报错:监听程序当前无法识别连接描述符中请求的服务