cocos creator版本:1.10.2
執行結果:(h5和原生都支援)
場景:
指令碼:
helloworld.js:
let shader =
require
(`shader`);
cc.class(,
onload()
,update
(dt),}
);
shader.js
let watershader =
require
(`watershader`);
module.exports =
,///
// 存放所有著色器程式
glprogramdict:
,// 建立乙個著色器程式
createglprogram
(glprogramname, vertstr, fragstr)
這個glprogram已經註冊過了!!!`);
return;}
glprogram =
newcc.glprogram()
;if(cc.sys.isnative)
else
glprogram.
link()
; glprogram.
updateuniforms()
; glprogram.
use();
this
.glprogramdict[glprogramname]
= glprogram;},
// 設定指定的著色器程式於指定node上
setglprogramfornode
(glprogramname, node)
這個glprogram未註冊!!!`);
return;}
let sprite = node.
getcomponent
(cc.sprite);if
(!sprite)
let sgnode = sprite._sgnode;
if(cc.sys.isnative)
else},
// 應用指定著色器程式
use(glprogramname)
這個glprogram未註冊!!!`);
return;}
glprogram.
use();
},// 為指定著色器程式設定uniform值
setuniformfloat
(glprogramname, uniformname, uniformvalue)
this
.setuniformcommon
(glprogramname, uniformname, uniformvalue,
`setuniformfloat`
,`setuniformlocationwith1f`);
},setuniformtexture
(glprogramname, uniformname, uniformvalue)
if(cc.sys.isnative)
else
這個glprogram未註冊!!!`);
return;}
let uniformlocation = glprogram.
getuniformlocationforname
(uniformname)
; glprogram.
setuniformlocationwith1i
(uniformlocation,1)
; cc.gl.
bindtexture2dn(1
, uniformvalue);}
},setuniformcommon
(glprogramname, uniformname, uniformvalue, jsbfnname, h5fnname)
這個glprogram未註冊!!!`);
return;}
if(cc.sys.isnative)
else}}
;
watershader.js
module.exports =
`, frag:
` varying vec2 v_texcoord;
uniform sampler2d normalmap; // 法線貼圖
uniform float v_offset; // 法線貼圖v座標偏移
// 糾正紋理座標 (當取樣座標超出範圍時,從另一邊出來,比如 1.1糾正為0.1,-0.1糾正為0.9 等)
vec2 get_fixuv_by_uv(vec2 uv)
if (uv.x < 0.0)
if (uv.y > 1.0)
if (uv.y < 0.0)
return uv;
}// 獲取法向
vec3 get_normal()
// 根據 折射方向 獲取新的紋理座標
vec2 get_uv_by_refract(vec3 refractvec)
void main()
`,};
ShadowMap自陰影在PS 1 x下的實現方法
目前至少有兩種廣泛採用的實時陰影發生技術。一種是shadowvolume,還有一種就是shadowmap。shadowvolume基於的是幾何體演算法,通過延伸光照輪廓區域進行正反面兩次渲染在螢幕的模板緩衝區內分離出陰影區域 本站中有z fail陰影的演算法要點 shadowvolume能夠得到十分...
dancing links解決X問題的C 實現
x問題,也稱精確覆蓋問題,就是給定乙個01矩陣,需要從中選取一些行組成乙個子矩陣,這個子矩陣的每一列有且僅有乙個1。這個問題聽起來就知道很難,必須使用回溯演算法來解決,但是我們知道回溯演算法要提高效率,就必須做好剪枝和回溯恢復的工作。這時演算法大師donald e.knoth給出了乙個巧妙的資料結構...
實訓筆記1
actioncontext com.opensymphony.xwork.actioncontext 是action執行時的上下文,上下文可以看作是乙個容器 其實我們這裡的容器就是乙個map而已 它存放放的是action在執行時需要用到的物件,比如 在使用webwork時,我們的上下文放有請求的引數...