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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GLSL 内建函数

發布時間:2025/7/25 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GLSL 内建函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from?http://blog.csdn.net/hgl868/article/details/7876257

?

? OpenGL ES著色語言為標量和向量操作定義了一套內建便利函數。有些內建函數可以用在多個類型的著色器中,有些是針對固定硬件的,所以這部分只能用在某個特定的著色器上。

?????? 內建函數基本上可以分為一下三類:

(1)它們使用一些簡便的方式提供必要的硬件功能,如材質貼圖。這些函數單獨通過著色器是無法模擬出來的。

(2)它們展示了一些可以常簡單的寫入的繁瑣操作(clamp, mix等),但是這些操作非常普遍,并且提供直接對硬件的支持。對于編譯器來說,將表達式映射到復雜的裝配線指令上是非常困難的。

(3)它們提供了對圖形硬件的操作,并且在適當時候進行加速。三角函數就是一個很好的例子。

?????? 有些函數名稱和常見的C庫函數類似,但是它們支持向量的輸入和更多的傳統標量輸入。

?????? 建議應用程序盡量使用內建函數而不是在著色器中實現相同的計算,因為內建函數是經過最大優化的(如,有些內建函數是直接操作硬件的)。

?????? 用戶定義的代碼可以重載內建函數,但最好不要重新定義它們。

? ? ?? 內建函數的輸入參數(和相應的輸出的參數)可以是float, vec2, vec3, vec4。對于函數的任何特定應用,實際的類型必須和所有的參數和返回值相同。就像mat,必須為mat2, mat3, mat4.

?????? 參數和返回值的精度修飾符是隱藏的,對于材質函數,返回類型的精度必須和采樣器類型匹配。

uniform lowp sampler2D sampler;
highp vec2 coord;
...
lowp vec4 col = texture2D (sampler, coord); // texture2D 返回類型的精度為lowp

? ? ? 其他內建函數形參的精度修飾是沒有任何關聯的。內建函數的調用將返回輸入參數的最高精度。

?

1? 角度和三角函數

???????? 標識為angle的函數參數假定以弧度為單位。這些函數不可能出現被0除的情況,如果被除數為0,結果是未定義的。

? radian函數是將角度轉換為弧度,degrees函數是將弧度轉換為角度。sin, cos, tan都是標準的三角函數。asin, acos, atan是反三角函數。genType有點像面向對象中泛型,即如果genType是float型的,那么

genType pow (genType x, genType y)

就變成了:

float pow (float x, float y)

同理,如果genType是int型的,那么就變成了:

int pow (int x, int y);

2? 指數函數

?

(1)genType pow (genType x, genType y)

????????? x的y次方。如果x小于0,結果是未定義的。同樣,如果x=0并且y<=0,結果也是未定義的。使用時應特別注意。

(2)genType exp (genType x)

????????? e的x次方

(3)genType log (genType x)

????????? 計算滿足x等于e的y次方的y的值。如果x的值小于0,結果是未定義的。

(4)genType exp2 (genType x)

???????? 計算2的x次方

(5)genType log2 (genType x)

???????? 計算滿足x等于2的y次方的y的值。如果x的值小于0,結果是未定義的。

(6)genType sqrt (genType x)

???????? 計算x的開方。如果x小于0,結果是未定義的。

(7)genType inversesqrt (genType x)

???????? 計算x的開方之一的值,如果x小于等于0,結果是未定義的。

3? 常用函數

(1)genType abs (genType x)

返回x的絕對值

(2)genType sign (genType x)

如果x>0,返回1.0;如果x=0,返回0,如果x<0,返回-1.0

(3)genType floor (genType x)

返回小于等于x的最大整數值

(4)genType ceil (genType x)

返回大于等于x的最小整數值

(5)genType fract (genType x)

返回x-floor(x),即返回x的小數部分

(6)genType mod (genType x, float y)、genType mod (genType x, genType y)

返回x – y * floor (x/y),即求模計算%

(7)genType min (genType x, genType y),genType min (genType x, float y)

返回x和y的值較小的那個值。

(8)genType max (genType x, genType y),genType max (genType x, float y)

返回x和y的值較大的那個值。

(9)genType clamp (genType x, genType minVal, genType maxVal)、genType clamp (genType x, float minVal, float maxVal)

clamp翻譯為夾具,就叫夾具函數吧,這個函數是什么意思呢?看看解釋的意思是:獲取x和minVal之間較大的那個值,然后再拿較大的那個值和最后那個最大的值進行比較然后獲取較小的那個,意思就明白了,clamp實際上是獲得三個參數中大小處在中間的那個值。函數有個說明:如果minVal > minMax的話,函數返回的結果是未定的。也就是說x的值大小沒有限制,但是minval的值必須比maxVal小。

(10)genType mix (genType x, genType y, genType a)、genType mix (genType x, genType y, float a)

返回線性混合的x和y,如:x?(1?a)+y?a

(11)genType step (genType edge, genType x),genType step (float edge, genType x)

如果x < edge,返回0.0,否則返回1.0

(12)genType smoothstep (genType edge0,genType edge1,genType x),genType smoothstep (float edge0,float edge1,genType x)

如果x <= edge0,返回0.0 ;如果x >= edge1 返回1.0;如果edge0 < x < edge1,則執行0~1之間的平滑埃爾米特差值。如果edge0 >= edge1,結果是未定義的。

4? 幾何函數

?

(1)float length (genType x)

返回向量x的長度

(2)float distance (genType p0, genType p1)

計算向量p0,p1之間的距離

(3)float dot (genType x, genType y)

向量x,y之間的點積

(4)vec3 cross (vec3 x, vec3 y)

向量x,y之間的叉積

(5)genType normalize (genType x)

標準化向量,返回一個方向和x相同但長度為1的向量

(6)genType faceforward(genType N, genType I, genType Nref)

如果Nref和I的點積小于0,返回N;否則,返回-N;

(7)genType reflect (genType I, genType N)

返回反射向量

(8)genType refract(genType I, genType N,float eta)

返回折射向量

5? 矩陣函數

(1)mat matrixCompMult (mat x, mat y)

矩陣x乘以y,result[i][j]是 x[i][j] 和 y[i][j] 的標量積。注意,要獲取線性代數矩陣的乘法,使用乘法操作符*。

6? 向量相關函數

?????? 相關或相等的操作符(<, <=, >, >=, ==, !=)被定義(或保留),返回一個標量布爾值。下面, “bvec” 是表示bvec2, bvec3, or bvec4的占位符, “ivec”是ivec2, ivec3, or ivec4的占位符,? “vec” 是vec2, vec3, or vec4的占位符. 在任何情況下,輸入和返回值向量的長度必須匹配。

?

(1)lessThan

比較x < y.

(2)lessThanEqual

比較x<=y

(3)greaterThan

比較x>y

(4)greaterThanEqual

比較x>=y

(5)equal

比較x==y

(6)notEqual

比較x!=y

(7)bool any(bvec x)

如果向量x的任何組件為true,則結果返回true。

(8)bool all(bvec x)

??????????? 如果向量x的所有組件均為true,則結果返回true。

(9)bvec not(bvec x)

返回向量x的互補矩陣

7? 材質查找函數

?????? 紋理(材質)查找函數對于定點著色器和片元著色器都適用。然而,定點著色器的細節級別并不是通過固定功能計算的,所以頂點著色器和片元著色器紋理查找之間還是有一些差別的。一下函數是通過采樣器訪問紋理,和使用OpenGL ES API是一樣的。紋理屬性如尺寸,像素格式,維數,過濾方法,紋理映射匹配數,深度比較等等在OpenGL ES API中都有定義。

??????? 在下面的函數中,bias參數對于片元著色器來說是可選的。但在定點著色器中不可使用。對于片元著色器,如果使用了bias這個參數,它被加到優先細節的計算級別中來執行紋理訪問操作。如果bias沒有使用,那么實現將自動選擇一個默認級別。對于非紋理映射的紋理,紋理是直接被使用的。如果是紋理映射的,并且在片元著色器中執行,那么使用LOD來進行紋理查找。如果是紋理映射的,并且在頂點著色器中執行,那么使用的是基本紋理。

??????? 以Lod結尾的內建函數只能用在頂點著色器中,在帶有Lod的函數中,lod參數直接用來表示細節級別。

?

8? 片元處理函數

?

?????? 片元處理函數只有在片元語言中才有,但在GLSL ES中沒有片元處理函數。

總結

以上是生活随笔為你收集整理的GLSL 内建函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 鲁鲁久久 | 久久久久久久久久久电影 | 国产精品美女自拍视频 | 亚洲精品h| 91成品人影院 | av五月| 性欧美激情| 91亚洲一区 | 欧美性猛交ⅹxxx乱大交3 | 亚洲综合在线第一页 | 91福利视频在线观看 | 日本人三级 | 户外少妇对白啪啪野战 | 成年人视频在线免费观看 | 91大神精品在线 | 少妇人妻一区二区 | av久草 | 欧美色图19p | 丰满少妇一区二区三区专区 | 欧美国产另类 | 人与拘一级a毛片 | 国产成人精品一区二区三区网站观看 | 自拍偷拍日韩 | 免费黄色在线 | 三上悠亚人妻中文字幕在线 | 欧州一级片| 国产精品久久久久久久久久久久久久久久久久 | 精品777| 五月激情网站 | 另类少妇人与禽zozz0性伦 | 韩国国产在线 | 黄色一级片毛片 | 亚洲最大网站 | 日本在线第一页 | 国产精品一区二区久久 | 久久夜夜操妹子 | 不卡av在线 | 日本免费不卡 | 国产精品久久久久久69 | 光棍影院av | 最近中文字幕在线中文视频 | 狂躁美女大bbbbbb黑人 | 国产精品综合久久 | 成人性生交大片免费 | 九九在线观看高清免费 | 狠狠躁夜夜躁 | 婚后打屁股高h1v1调教 | 日本不卡一二 | 亚洲综合久久婷婷 | 变态另类ts人妖一区二区 | 91成人福利视频 | 国产精品人人爽人人爽 | 无码人妻一区二区三区线 | 一区二区成人av | 国产传媒视频在线观看 | 国产ts在线视频 | javxxx| 天天干天天舔天天射 | 少妇精品一区二区三区 | 免费黄视频网站 | 黄色avv| 国产伦精品一区二区三区视频女 | 久久精品亚洲无码 | 日本黄色一级 | 精品一区二区视频在线观看 | 天堂在线观看 | 亚洲情热 | 亚洲精品国产一区二 | 中文字幕电影一区 | 色哟哟国产精品色哟哟 | 亚洲一区二区三区四区在线播放 | 99精品热视频 | 精品久久久久久久久久久久久久久 | 亚洲男人天堂2017 | 天天爽夜夜爽人人爽 | 桃谷绘里香在线播放 | 亚洲精品www. | 日韩卡一卡二 | 成人自拍在线 | 在线成人播放 | 免费黄色小视频 | 美女一区 | 制服.丝袜.亚洲.另类.中文 | 久久久精品人妻一区二区三区 | 黄色片视频免费 | 日韩精品电影一区 | 美女的奶胸大爽爽大片 | 亚洲精品天天 | 一二区免费视频 | av成人在线免费观看 | 污视频免费在线 | 在线精品自拍 | 国产成人小视频 | 九九热re| 欧美视频日韩 | 亚洲人成7777| 国产一区二区视频在线播放 | 1024亚洲 | 91精品在线观看入口 |