日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

opengl dfdx dfdy

發布時間:2024/1/8 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。