53 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | uniform sampler2D morphDataPos; | ||
|  | uniform sampler2D morphDataNor; | ||
|  | uniform vec2 morphScaleOffset; | ||
|  | uniform vec2 morphDataDim; | ||
|  | uniform vec4 morphWeights[8]; | ||
|  | 
 | ||
|  | void getMorphedVertex(vec2 uvCoord, inout vec3 A){ | ||
|  |     for(int i = 0; i<8; i++ ) | ||
|  |     {         | ||
|  |         vec4 tempCoordY = vec4( uvCoord.y -     (i * 4) * morphDataDim.y,  | ||
|  |                                 uvCoord.y - (i * 4 + 1) * morphDataDim.y, | ||
|  |                                 uvCoord.y - (i * 4 + 2) * morphDataDim.y, | ||
|  |                                 uvCoord.y - (i * 4 + 3) * morphDataDim.y); | ||
|  | 
 | ||
|  |         vec3 morph = texture(morphDataPos, vec2(uvCoord.x, tempCoordY.x)).rgb * morphScaleOffset.x + morphScaleOffset.y; | ||
|  |         A += morphWeights[i].x * morph; | ||
|  | 
 | ||
|  |         morph = texture(morphDataPos, vec2(uvCoord.x, tempCoordY.y)).rgb * morphScaleOffset.x + morphScaleOffset.y; | ||
|  |         A += morphWeights[i].y * morph; | ||
|  | 
 | ||
|  |         morph = texture(morphDataPos, vec2(uvCoord.x, tempCoordY.z)).rgb * morphScaleOffset.x + morphScaleOffset.y; | ||
|  |         A += morphWeights[i].z * morph; | ||
|  | 
 | ||
|  |         morph = texture(morphDataPos, vec2(uvCoord.x, tempCoordY.w)).rgb * morphScaleOffset.x + morphScaleOffset.y; | ||
|  |         A += morphWeights[i].w * morph; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | void getMorphedNormal(vec2 uvCoord, vec3 oldNor, inout vec3 morphNor){ | ||
|  |      | ||
|  |     for(int i = 0; i<8; i++ ) | ||
|  |     { | ||
|  |         vec4 tempCoordY = vec4( uvCoord.y -     (i * 4) * morphDataDim.y,  | ||
|  |                                 uvCoord.y - (i * 4 + 1) * morphDataDim.y, | ||
|  |                                 uvCoord.y - (i * 4 + 2) * morphDataDim.y, | ||
|  |                                 uvCoord.y - (i * 4 + 3) * morphDataDim.y); | ||
|  |          | ||
|  |         vec3 norm = oldNor + morphWeights[i].x * (texture(morphDataNor, vec2(uvCoord.x, tempCoordY.x)).rgb * 2.0 - 1.0); | ||
|  |         morphNor += norm; | ||
|  | 
 | ||
|  |         norm = oldNor + morphWeights[i].y * (texture(morphDataNor, vec2(uvCoord.x, tempCoordY.y)).rgb * 2.0 - 1.0); | ||
|  |         morphNor += norm; | ||
|  | 
 | ||
|  |         norm = oldNor + morphWeights[i].z * (texture(morphDataNor, vec2(uvCoord.x, tempCoordY.z)).rgb * 2.0 - 1.0); | ||
|  |         morphNor += norm; | ||
|  | 
 | ||
|  |         norm = oldNor + morphWeights[i].w * (texture(morphDataNor, vec2(uvCoord.x, tempCoordY.w)).rgb * 2.0 - 1.0); | ||
|  |         morphNor += norm; | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     morphNor = normalize(morphNor); | ||
|  | } |