use vec4 uniform array instead of float array

This commit is contained in:
QuantumCoderQC 2021-10-27 16:25:49 +02:00
parent 1d0eaf9371
commit 4522055fac
1 changed files with 40 additions and 12 deletions

View File

@ -1,27 +1,55 @@
uniform sampler2D morphDataPos;
uniform sampler2D morphDataNor;
uniform vec2 morphScaleOffset;
uniform float morphWeights[32];
uniform vec2 morphDataDim;
uniform vec4 morphWeights[8];
void getMorphedVertex(vec2 uvCoord, inout vec3 A){
for(int i = 0; i<32; i++ )
{
vec2 tempCoord = uvCoord;
tempCoord.y *= i;
vec3 morph = texture(morphDataPos, tempCoord).rgb * morphScaleOffset.x + morphScaleOffset.y;
A += morphWeights[i] * morph;
for(int i = 0; i<8; i++ )
{
vec4 tempCoordX = vec4( uvCoord.x);
vec4 tempCoordY = vec4( uvCoord.y - (i) * morphDataDim.y,
uvCoord.y - (i + 1) * morphDataDim.y,
uvCoord.y - (i + 2) * morphDataDim.y,
uvCoord.y - (i + 3) * morphDataDim.y);
vec3 morph = texture(morphDataPos, vec2(tempCoordX.x, tempCoordY.x)).rgb * morphScaleOffset.x + morphScaleOffset.y;
A += morphWeights[i].x * morph;
morph = texture(morphDataPos, vec2(tempCoordX.y, tempCoordY.y)).rgb * morphScaleOffset.x + morphScaleOffset.y;
A += morphWeights[i].y * morph;
morph = texture(morphDataPos, vec2(tempCoordX.z, tempCoordY.z)).rgb * morphScaleOffset.x + morphScaleOffset.y;
A += morphWeights[i].z * morph;
morph = texture(morphDataPos, vec2(tempCoordX.w, 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<32; i++ )
for(int i = 0; i<8; i++ )
{
vec2 tempCoord = uvCoord;
tempCoord.y *= i;
vec3 norm = morphWeights[i] + (texture(morphDataNor, tempCoord).rgb * 2.0 - 1.0);
vec4 tempCoordX = vec4( uvCoord.x);
vec4 tempCoordY = vec4( uvCoord.y - (i) * morphDataDim.y,
uvCoord.y - (i + 1) * morphDataDim.y,
uvCoord.y - (i + 2) * morphDataDim.y,
uvCoord.y - (i + 3) * morphDataDim.y);
vec3 norm = oldNor + morphWeights[i].x * (texture(morphDataNor, vec2(tempCoordX.x, tempCoordY.x)).rgb * 2.0 - 1.0);
morphNor += norm;
norm = oldNor + morphWeights[i].y * (texture(morphDataNor, vec2(tempCoordX.y, tempCoordY.y)).rgb * 2.0 - 1.0);
morphNor += norm;
norm = oldNor + morphWeights[i].z * (texture(morphDataNor, vec2(tempCoordX.z, tempCoordY.z)).rgb * 2.0 - 1.0);
morphNor += norm;
norm = oldNor + morphWeights[i].w * (texture(morphDataNor, vec2(tempCoordX.w, tempCoordY.w)).rgb * 2.0 - 1.0);
morphNor += norm;
}
morphNor += oldNor;
morphNor = normalize(morphNor);
}