Port from tinygltf to fx-gltf
This commit is contained in:
@@ -4,12 +4,12 @@ layout(location = 0) out vec4 f_color;
|
||||
|
||||
in vec3 v_normal;
|
||||
in vec2 v_texCoord;
|
||||
in vec3 v_fragmentPositionTangent;
|
||||
in vec3 v_fragmentPosition;
|
||||
|
||||
in vec3 v_lightDirectionTangent;
|
||||
in vec3 v_lightPositionTangent0;
|
||||
in vec3 v_lightDirection;
|
||||
in vec3 v_lightPosition0;
|
||||
|
||||
in vec3 v_viewPositionTangent;
|
||||
in vec3 v_viewPosition;
|
||||
|
||||
struct Material
|
||||
{
|
||||
@@ -61,12 +61,12 @@ void main()
|
||||
vec3 normal = texture(u_material.texture_normal, v_texCoord).rgb;
|
||||
normal = normalize(normal * 2.0 - 1.0);
|
||||
|
||||
vec3 viewDir = normalize(v_viewPositionTangent - v_fragmentPositionTangent);
|
||||
vec3 viewDir = normalize(v_viewPosition - v_fragmentPosition);
|
||||
|
||||
fragmentColor += directionalLightContribution(u_directionalLight, normal, viewDir);
|
||||
|
||||
for (int i = 0; i < NUM_POINT_LIGHTS; i++) {
|
||||
fragmentColor += pointLightContribution(u_pointLight[i], normal, v_fragmentPositionTangent, viewDir);
|
||||
fragmentColor += pointLightContribution(u_pointLight[i], normal, v_fragmentPosition, viewDir);
|
||||
}
|
||||
|
||||
f_color = vec4(fragmentColor, 1.0f);
|
||||
@@ -78,7 +78,7 @@ vec3 directionalLightContribution(DirectionalLight light, vec3 normal, vec3 view
|
||||
if (!light.isActive)
|
||||
return vec3(0.0f);
|
||||
|
||||
vec3 lightDir = normalize(-v_lightDirectionTangent);
|
||||
vec3 lightDir = normalize(-v_lightDirection);
|
||||
|
||||
vec3 diffuseColor = light.color;
|
||||
vec3 specularColor = light.color * 0.5f;
|
||||
@@ -96,7 +96,7 @@ vec3 pointLightContribution(PointLight light, vec3 normal, vec3 fragPos, vec3 vi
|
||||
if (!light.isActive)
|
||||
return vec3(0.0f);
|
||||
|
||||
vec3 lightDir = normalize(v_lightPositionTangent0 - fragPos);
|
||||
vec3 lightDir = normalize(v_lightPosition0 - fragPos);
|
||||
|
||||
vec3 diffuseColor = light.color;
|
||||
vec3 specularColor = light.color * 0.5f;
|
||||
@@ -105,10 +105,10 @@ vec3 pointLightContribution(PointLight light, vec3 normal, vec3 fragPos, vec3 vi
|
||||
vec3 ambient, diffuse, specular;
|
||||
computeShading(ambientColor, diffuseColor, specularColor, lightDir, viewDir, normal, ambient, diffuse, specular);
|
||||
|
||||
float attenuation = computeAttenuation(v_lightPositionTangent0, fragPos, 0.032f);
|
||||
// ambient *= attenuation;
|
||||
// diffuse *= attenuation;
|
||||
// specular *= attenuation;
|
||||
float attenuation = computeAttenuation(v_lightPosition0, fragPos, 0.032f);
|
||||
ambient *= attenuation;
|
||||
diffuse *= attenuation;
|
||||
specular *= attenuation;
|
||||
|
||||
return ambient + diffuse + specular;
|
||||
}
|
||||
|
||||
@@ -8,10 +8,10 @@ layout(location = 3) in vec4 a_tangent;
|
||||
out vec3 v_normal;
|
||||
out vec2 v_texCoord;
|
||||
|
||||
out vec3 v_fragmentPositionTangent;
|
||||
out vec3 v_fragmentPosition;
|
||||
out vec4 v_fragmentPositionDirectionalLightSpace;
|
||||
|
||||
out vec3 v_viewPositionTangent;
|
||||
out vec3 v_viewPosition;
|
||||
|
||||
struct DirectionalLight
|
||||
{
|
||||
@@ -20,7 +20,7 @@ struct DirectionalLight
|
||||
vec3 color;
|
||||
};
|
||||
uniform DirectionalLight u_directionalLight;
|
||||
out vec3 v_lightDirectionTangent;
|
||||
out vec3 v_lightDirection;
|
||||
|
||||
struct PointLight
|
||||
{
|
||||
@@ -30,7 +30,7 @@ struct PointLight
|
||||
};
|
||||
#define NUM_POINT_LIGHTS 1
|
||||
uniform PointLight u_pointLight[NUM_POINT_LIGHTS];
|
||||
out vec3 v_lightPositionTangent0;
|
||||
out vec3 v_lightPosition0;
|
||||
|
||||
uniform vec3 u_viewPosition;
|
||||
|
||||
@@ -45,14 +45,14 @@ void main()
|
||||
vec3 N = normalize(vec3(u_modelMatrix * vec4(a_normal, 0.0f)));
|
||||
T = normalize(T - dot(T, N) * N);
|
||||
vec3 B = cross(N, T) * a_tangent.w;
|
||||
mat3 TBN_transposed = transpose(mat3(T, B, N));
|
||||
mat3 TBN = transpose(mat3(T, B, N));
|
||||
|
||||
v_lightDirectionTangent = TBN_transposed * u_directionalLight.direction;
|
||||
v_lightPositionTangent0 = TBN_transposed * u_pointLight[0].position;
|
||||
v_lightDirection = TBN * u_directionalLight.direction;
|
||||
v_lightPosition0 = TBN * u_pointLight[0].position;
|
||||
|
||||
v_fragmentPositionTangent = TBN_transposed * vec3(u_modelMatrix * vec4(a_position, 1.0f));
|
||||
v_viewPositionTangent = TBN_transposed * u_viewPosition; // seems like this is always 0 ?
|
||||
v_fragmentPosition = TBN * vec3(u_modelMatrix * vec4(a_position, 1.0f));
|
||||
v_viewPosition = TBN * u_viewPosition;
|
||||
|
||||
v_normal = a_normal;
|
||||
v_normal = N;
|
||||
v_texCoord = a_texCoord;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user