GLSL 到 HLSL 參考(二)

2021-07-30 22:24:41 字數 1314 閱讀 1878

前一篇**msdn的一篇文章,具體介紹了glsl到hlsl的參考。本來是想用unity shader復shadertoy(裡面那些神奇的shader。shadertoy裡面的shader都是用webgl呈現的,用的都是opengl,我寫shader使用的是cg,但hlsl和cg基本都差不多,一般我看都沒有介紹glsl到cg的轉換,了解glsl到hlsl也就行了。

為什麼我在msdn詳盡的介紹之後還寫乙個續篇呢?有兩個想介紹的東西。

(1)glsl與unity shader中對應矩陣

首先,我知道這是乙個基礎知識沒學明白才會產生的問題。學乙個知識不能僅僅限於程式設計會用方面,還要懂得原理,否則一旦出了某個熟悉的程式設計環境就束手無策了,痛的領悟。下面的這個矩陣對應真的很基礎,而我還是仔細看了才明白對應關係,如果你也不知道可以參考一下。

gl_position = projectionmatrix * viewmatrix * modelmatrix * vec4(position, 1.0);

o.pos = mul(unity_matrix_mvp, v.position);

這個矩陣變換就對應unity中的mvp啊,因為用mvp習慣了,一下子單獨看沒聯想起來,我還查了一下。

(2)如果你不想逐個改,也可以寫幾個define巨集,這樣,很多時候就能直接用你的glsl**啦,算是比較通用。下面**來自csdn某位大神上傳的shadertoy的一些shader的unity shader實現。

#include "unitycg.cginc"  

#pragma target 3.0

#define vec2 float2

#define vec3 float3

#define vec4 float4

#define mat2 float2x2

#define iglobaltime _time.y

#define mod fmod

#define mix lerp

#define atan atan2

#define fract frac

#define texture2d tex2d

// 螢幕的尺寸

#define iresolution _screenparams

// 螢幕中的座標,以pixel為單位

#define gl_fragcoord ((_iparam.srcpos.xy/_iparam.srcpos.w)*_screenparams.xy)

一般加上這些,可以直接把glsl**複製過來用了,按需求寫巨集吧。

以後要多多學習圖形學的基本知識呀。

HLSL初級教程 結語,參考資料

結語 至此,hlsl 初級內容介紹完畢,相信讀者已經對hlsl 著色器 effect 等概念有了比較深入的理解,並且掌握了hlsl 程式設計的基本方法,文章中裁去了對hlsl 文件,教程配套程式原始碼放在 希望本教程能夠幫助大家穿越hlsl 之門,進入豐富多彩的direct3d 渲染世界。參考資料 ...

GLSL 參考GIMP原始碼實現色彩平衡調節

修圖工具中的色彩平衡一般用來根據亮度等級調整中顏色的偏色,調整偏色涉及到加色原理和減色原理 其實我們通過三原色加色原理的就可以知道,紅色的對比色是青色,藍色的對比色是黃色,綠色的對比色是品紅,這樣說可能不太直觀,其實我們只要試一下,把的r值整體提高,會偏紅 廢話 降低r值,會偏青色,g通道和b通道同...

GPU程式設計之GLSL(二)

首先我們需要有乙個c 的工程 共包含5個檔案 乙個主工程檔案,兩個負責讀寫的,乙個頂點著色器,乙個片段著色器 目前這個程式執行的結果為 乙個旋轉的茶壺 下一節會講有關opengl與著色器的通訊問題。各個檔案 如下 第乙個即為主工程檔案 include include include include ...