1. 程式人生 > >圖形處理之Shader語言(二)CG語法篇

圖形處理之Shader語言(二)CG語法篇

Cg(C for Graphcis)語言,是NVIDIA與Microsoft合作研發,旨在為開發人員提供一套方便、跨平臺(良好的相容性),控制可程式設計圖形硬體的高階語言。

學習書籍  :GPU 程式設計與CG 語言之陽春白雪下里巴人

1. 基本資料型別

Cg 支援 7 種基本的資料型別:

      1. float,浮點資料,一個符號位。浮點資料型別被所有的profile支援(但是DirectX8 pixel profiles在一些操作中降低了浮點數的精度和範圍);
      2.half,16 [-6萬-6萬]精度小數點後3.2位,為浮點資料;
      3.int
,32位整形資料,有些profile會將int型別作為float型別使用;
      4.fixed,[-2~2]精度是1/256,12位定點數,被所有的fragment profiles所支援;
      5.bool,布林資料,通常用於if和條件操作符(?:),布林資料型別被所有的

profiles 支援;

      6. sampler*,紋理物件的控制代碼(the handle to a texture object),分為 6 類:sampler, sampler1D, sampler2D, sampler3D, samplerCUBE,和 samplerRECT。DirectX profiles 不支援 samplerRECT 型別,除此之外這些型別被所有的 pixelprofiles 和 NV40 vertex program profile 所支援(CgUsersManual 30 頁)。由此可見,在不遠的未來,頂點程式也將廣泛支援紋理操作;

      7. string,字元型別,該型別不被當前存在的 profile 所支援,實際上也沒有必要在 Cg 程式中用到字元型別,但是你可以通過 Cg runtime API 宣告該型別變數,並賦值;因此,該型別變數可以儲存 Cg 檔案的資訊。


(1)數學函式

函式 功能描述
abs(x) 返回輸入引數的絕對值
acos(x) 反餘切函式,輸入引數範圍為[-1,1], 返回[0,π]區間的角度值
all(x) 如果輸入引數均不為0,則返回ture; 否則返回flase。&&運算
any(x) 輸入引數只要有其中一個不為0,則返回true。
asin(x) 反正弦函式,輸入引數取值區間為[1,1],返回角度值範圍為, [π2,π2]
atan(x) 反正切函式,返回角度值範圍為[π2,π2]
atan2(y,x) 計算y/x的反正切值。實際上和atan(x)函式功能完全一樣,至少輸入引數不同。atan(x) = atan2(x, float(1))。
ceil(x) 對輸入引數向上取整。例如: ceil(float(1.3)) ,其返回值為2.0
clamp(x,a,b) 如果x值小於a,則返回a
如果x值大於b,返回b
否則,返回x
cos(x) 返回弧度x的餘弦值。返回值範圍為[1,1]
cosh(x) 雙曲餘弦(hyperbolic cosine)函式,計算x的雙曲餘弦值。
cross(A,B) 返回兩個三元向量的叉積(cross product)。注意,輸入引數必須是三元向量!
degrees(x) 輸入引數為弧度值(radians),函式將其轉換為角度值(degrees)
determinant(m) 計算矩陣的行列式因子。
dot(A,B) 返回AB的點積(dot product)。引數AB可以是標量,也可以是向量(輸入引數方面,點積和叉積函式有很大不同)。
exp(x) 計算ex的值,e=2.71828182845904523536
exp2(x) 計算2x的值
floor(x) 對輸入引數向下取整。例如floor(float(1.3))返回的值為1.0;但是floor(float(-1.3))返回的值為-2.0。該函式與ceil(x)函式相對應。
fmod(x,y) 返回x/y的餘數。如果y0,結果不可預料。
frac(x) 返回標量或向量的小數
frexp(x, out i) 將浮點數x分解為尾數和指數,即x=m2i, 返回m,並將指數存入i中;如果x0,則尾數和指數都返回0
isfinite(x) 判斷標量或者向量中的每個資料是否是有限數,如果是返回true;否則返回false;
isinf(x) 判斷標量或者向量中的每個資料是否是無限,如果是返回true;否則返回false;
isnan(x) 判斷標量或者向量中的每個資料是否是非資料(not-a-number NaN),如果是返回true;否則返回false;
ldexp(x, n) 計算x2n的值
lerp(a, b, f) 計算(1f)a+bf或者a+f(ba)的值。即在下限a和上限b之間進行插值,f表示權值。注意,如果ab是向量,則權值f必須是標量或者等長的向量。
lit(NdotL, NdotH, m) N表示法向量;
L表示入射光向量;
H表示半形向量;
m表示高光係數。 
函式計算環境光、散射光、鏡面光的貢獻,返回的4元向量。 
X位表示環境光的貢獻,總是1.0; 
Y位代表散射光的貢獻,如果 NL<0,則為0;否則為NL 
Z位代表鏡面光的貢獻,如果NL<0 或者NH<0,則位0;否則為(NL)m;
W位始終位1.0
log(x) 計算ln(x)的值,x必須大於0
log2(x) 計算log(x)2的值,x必須大於0
log10(x) 計算log(x)

相關推薦

圖形處理Shader語言CG語法

Cg(C for Graphcis)語言,是NVIDIA與Microsoft合作研發,旨在為開發人員提供一套方便、跨平臺(良好的相容性),控制可程式設計圖形硬體的高階語言。 學習書籍  :GPU

圖形處理Shader語言GLSL語法

變數 GLSL的變數命名方式與C語言類似。變數的名稱可以使用字母,數字以及下劃線,但變數名不能以數字開頭,還有變數名不能以gl_作為字首,這個是GLSL保留的字首,用於GLSL的內部變數。當然還有一些GLSL保留的名稱是不能夠作為變數的名稱的。 基本型別 除了布林型,整型

影象處理特徵不變運算元系列Harris運算元

           在前面的博文中,介紹了Moravec運算元,並對moravec運算元的不足也進行了簡單的描述,具體請參考:影象處理特徵運算元系列之Moravec運算元(一)。Harris運算元

Unity Shader Cg語言

一、Cg基本資料型別 float 32位浮點數 half 16位浮點數 int 32位整型 fixed 12位定點數 bool 布林資料 simpler* 紋理物件的控制代碼( the handle to a text

c/c++預處理過程詳解條件編譯及預定義的巨集

未經博主同意不得私自轉載!不準各種形式的貼上複製本文及盜圖! 首先對於上篇文章中巨集定義的補充: (1)#define NAME"zhangyuncong" 程式中有"NAME"則,它會不會被替換呢? (2)#define 0x abcd 可以嗎?也就是說,可不可以用不是

第三方登入QQ登入——OAuth2.0處理流程介紹以QQ登入為例

為了讓網站更快接入,騰訊提供了JS SDK的接入方案,具體點選這裡或者點選這裡進行檢視。不過也可以自己寫程式碼,當然你需要了解QQ的OAuth2.0的處理流程(Web Server Flow)。OAuth2.0的處理流程:點選這裡檢視官方Wiki。1.授權:獲取授權碼Auth

R語言匯入資料來源

4 匯入XML資料    R中有若干用於處理XML檔案的包。例如,由Duncan Temple Lang編寫的XML包允許使用者讀取、寫入和操作XML檔案。詳情參閱 5 從網頁抓取資料 在web資料抓取(Webscraping)的過程中,使用者從網際網路上提取嵌入在網頁中的

.NET Core單元測試:使用記憶體資料庫處理單元測試中的資料庫依賴

目錄 定義一個待測試API 測試用例 為減少篇幅,隱藏了SampleEntity和SqliteDbContext 定義一個待測試API 如下,我們定義了一個名為Sample的API,其中有一個外部依賴項Sqli

GO語言web框架Gin完全指南

這篇主要講解自定義日誌與資料驗證 引數驗證 我們知道,一個請求完全依賴前端的引數驗證是不夠的,需要前後端一起配合,才能萬無一失,下面介紹一下,在Gin框架裡面,怎麼做介面引數驗證的呢 gin 目前是使用 go-playground/validator 這個框架,截止目前,預設是使用 v10 版本;具體用法可以

爬蟲庫BeautifulSoup學習

不必要 baidu html left 官方 blank 正則 文本處理 比較 BeautifulSoup官方介紹文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html 四大對象種

CSS3學習系列選擇器

計算 選擇器 sky :focus ddr gree for 指定元素 學習 first-child選擇器和last-child選擇器 first-child指定第一個元素。last-child指定最後一個子元素。 例如: <!DOCTYPE html>

elasticsearch index create index

temp fec toc 使用 con 速度 query type valid 創建索引需要創建索引並且更新集群index matedata,這一過程在MetaDataCreateIndexService的createIndex方法中完成。這裏會提交一個高優先級,Acked

MVC實戰排球計分—— 構架概要設計

eight med 語言 fusion 詳情 插入數據 輸出數據 one 交互界面 本程序主要基於MVC4框架,使應用程序的輸入,處理和輸出強制性分開,使得軟件可維護性,可擴展性,靈活性以及封裝性得到提高, MVC應用程序分為三個核心部件:Model,View, Contr

Python學習第一章:第一次的親密接觸初識程序

inpu alt blog put 分享 裏的 hello 格式 img 上次我們講到print(Hello Word)及變量的使用,下面我們繼續: 比如我們想在程序中實現格式化輸出如: 那麽我們我們就要進行簡單的格式化定義,一個很簡單的input語法實現,案例如下:

Java集合初探Iterator叠代器,collections,打包/解包裝箱拆箱,泛型(Generic),comparable接口

基本 generate 等於 框架 ring bin list() each 是否 Iterator(叠代器) 所有實現了Collection接口的容器都有一個iterator方法, 用來返回一個實現了Iterator接口的對象 Iterator對象稱作叠代器, 用來

小白學習Code First

文件中 build 默認 dbm pcre student 技術分享 使用 類名 Code First約定: 註:EDMX模板 (SSDL:存儲模型=>數據庫表 ,CSDL:概念模型=>實體,C-S模型=>存儲和概念模型之間的映射關系) System.Da

CLR類型設計泛型

where條件 之前 解釋 columns 文章閱讀 sin 自己的 讀書 spl 在上一篇文章中,介紹了什麽是泛型,以及泛型和非泛型的區別,這篇文章主要講一些泛型的高級用法,泛型方法,泛型泛型接口和泛型委托,協變和逆變泛型類型參數和約束性,泛型的高

java nio channel通道

java niojava nio 通道上一篇文章裏就講述過,channel總是寫數據的時候,要先把數據寫入到bytebuffer,讀數據的時候總是要先從channel中讀入到bytebuffer。如下圖,這個圖是好多知名博客常用的圖,很好理解這個channel。channel分為一下幾種:FileChanne

google軟件測試道讀後感

世界 簡單 分析 故事 好的 多次 新的 模型 證明 這幾天又翻了幾頁這本書,覺得妙語連珠,關鍵語錄摘抄如下,並補充自己的一些思考: “如果你想要求一個團隊去嘗試新的事物或者做某些改進,給他們提供一個聯系人會更好一些,這個聯系人來源於更大的社區,並可以從他那裏得到幫助”;

器學習數學基礎矩陣理論

pac 本質 uid spa album 空間 矩陣 amp .com 目錄 一、線性空間 1. 線性空間的概念 (1) 線性空間的定義 (2) 線性空間的本質 2. 線性空間的基 (1) 線性表示 (2) 線性相關 (3) 線性無關 (4) 線性空間基的定義 (5) 坐標