float shininess;
float reflectivity;
+ float refractiveIndex;
+ float opacity;
bool hasTexture;
bool hasSpecularMap;
out vec4 FragColor;
-vec4 reflection(vec3 normal) {
+vec4 reflection() {
vec3 I = normalize(worldFragPos - worldViewPos);
- vec3 R = reflect(I, normalize(normal));
+ vec3 R = reflect(I, normalize(worldNormal));
+ return vec4(texture(skybox, R).rgb, 1);
+}
+
+vec4 refraction() {
+ float ratio = 1.f / material.refractiveIndex;
+ vec3 I = normalize(worldFragPos - worldViewPos);
+ vec3 R = refract(I, normalize(worldNormal), ratio);
return vec4(texture(skybox, R).rgb, 1);
}
if (!material.hasTexture)
diffTex = material.diffuse;
- diffTex = mix(diffTex, reflection(worldNormal), material.reflectivity);
+ diffTex = mix(diffTex, reflection(), material.reflectivity);
+
+ diffTex = mix(diffTex, refraction(), 1 - material.opacity);
vec4 ambient = material.ambient * diffTex;