mirror of
				https://github.com/ifengzp/cocos-awesome.git
				synced 2025-10-31 11:25:53 +00:00 
			
		
		
		
	
		
			
	
	
		
			90 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. | |||
|  | 
 | |||
|  | CCEffect %{ | |||
|  |   techniques: | |||
|  |   - passes: | |||
|  |     - vert: vs | |||
|  |       frag: fs | |||
|  |       blendState: | |||
|  |         targets: | |||
|  |         - blend: true | |||
|  |       rasterizerState: | |||
|  |         cullMode: none | |||
|  |       properties: | |||
|  |         texture: { value: white } | |||
|  |         dots: {value: 80.0} | |||
|  |         center: {value: [0, 1]} | |||
|  |         time: {value: 0} | |||
|  | }% | |||
|  | 
 | |||
|  | CCProgram vs %{ | |||
|  |   precision highp float; | |||
|  | 
 | |||
|  |   #include <cc-global> | |||
|  |   #include <cc-local> | |||
|  | 
 | |||
|  |   in vec3 a_position; | |||
|  |   in vec4 a_color; | |||
|  |   out vec4 v_color; | |||
|  | 
 | |||
|  |   #if USE_TEXTURE | |||
|  |   in vec2 a_uv0; | |||
|  |   out vec2 v_uv0; | |||
|  |   #endif | |||
|  | 
 | |||
|  |   void main () { | |||
|  |     vec4 pos = vec4(a_position, 1); | |||
|  | 
 | |||
|  |     #if CC_USE_MODEL | |||
|  |     pos = cc_matViewProj * cc_matWorld * pos; | |||
|  |     #else | |||
|  |     pos = cc_matViewProj * pos; | |||
|  |     #endif | |||
|  | 
 | |||
|  |     #if USE_TEXTURE | |||
|  |     v_uv0 = a_uv0; | |||
|  |     #endif | |||
|  | 
 | |||
|  |     v_color = a_color; | |||
|  | 
 | |||
|  |     gl_Position = pos; | |||
|  |   } | |||
|  | }% | |||
|  | 
 | |||
|  | CCProgram fs %{ | |||
|  |   precision highp float; | |||
|  |   uniform sampler2D texture; | |||
|  |   uniform sampler2D texture2; | |||
|  |   uniform Common { | |||
|  |     vec2 center; | |||
|  |     float dots; | |||
|  |     float time; | |||
|  |   }; | |||
|  |   float progress = time; | |||
|  |   in mediump vec2 v_uv0; | |||
|  |   in vec4 v_color; | |||
|  | 
 | |||
|  |   vec4 getFromColor(vec2 uv) { | |||
|  |     return texture(texture, uv); | |||
|  |   } | |||
|  |   vec4 getToColor(vec2 uv) { | |||
|  |     return texture(texture2, uv); | |||
|  |   } | |||
|  | 
 | |||
|  |   vec4 transition(vec2 uv) { | |||
|  |     // 计算当前UV坐标点到图像中心点的距离 | |||
|  |     float distanceToCenter = distance(uv, center); | |||
|  |     // 计算UV坐标点映射到dots纹理中的位置,并计算该位置与纹理中心点的距离 | |||
|  |     float distanceToDotsCenter = distance(fract(uv * dots), vec2(0.5, 0.5)); | |||
|  | 
 | |||
|  |     // 比较UV坐标点到纹理中心点的距离与进度的比值,如果比值小于等于progress, | |||
|  |     // 并且distanceToDotsCenter小于distanceToCenter,则认为需要切换到下一张图像 | |||
|  |     bool nextImage = distanceToDotsCenter < (progress / distanceToCenter); | |||
|  |     return nextImage ? getToColor(uv) : getFromColor(uv); | |||
|  |   } | |||
|  | 
 | |||
|  |   void main () { | |||
|  |       gl_FragColor = v_color * transition(v_uv0); | |||
|  |   } | |||
|  | }% |