日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opengl dfdx dfdy

發(fā)布時間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opengl dfdx dfdy 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文是關(guān)于偏導(dǎo)數(shù)函數(shù)dfdx、dfdy的個人實驗理解,如有錯誤,請各位留言指正!

參考文檔:
https://segmentfault.com/a/1190000019681666?utm_source=tag-newest
https://blog.csdn.net/herramadeus/article/details/21037503

個人認(rèn)為偏導(dǎo)數(shù)是一個物體空間坐標(biāo)與物體所渲染的屏幕坐標(biāo)的一個比值。請看下面具體的驗證。

頂點著色器:

#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;//根據(jù)偏導(dǎo)數(shù)數(shù)值進(jìn)行渲染 因為浮點精度問題,不能直接相等//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); }}

程序設(shè)置:

//平面的空間坐標(biāo)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坐標(biāo)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的偏導(dǎo)數(shù)應(yīng)為1.0/250.0glUniform1f(1, 1.0/250.0f);


物體渲染受平移,旋轉(zhuǎn),縮放的影響,分別進(jìn)行測試。

平移/綻放:

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);//遠(yuǎn)離(縮小)了一倍,渲染寬高應(yīng)為125glUniform1f(1, 1.0/125.0);

旋轉(zhuǎn):

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度的旋轉(zhuǎn),投影到水平是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.

總結(jié)

以上是生活随笔為你收集整理的opengl dfdx dfdy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。