From b8cccb7b20059e3c571f2da15fca73eb84148375 Mon Sep 17 00:00:00 2001
From: adala867 <adala867@student.liu.se>
Date: Thu, 4 May 2023 16:42:13 +0200
Subject: [PATCH] Fix bump mapping by multiplying normal with TBN

---
 main             | Bin 150328 -> 150328 bytes
 main.cpp         |   4 ++--
 shaders/ray.frag |  11 ++++++++---
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/main b/main
index b0ac335204b69b8753125002a40ff341e826a33f..02c378767719f17b8bf327401a9b792d0e8a7a0b 100644
GIT binary patch
delta 2823
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
XHn8QE(;H_p)=xgbB(QB3qs2x5k>t!0

delta 2833
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

diff --git a/main.cpp b/main.cpp
index bc50479..9780055 100644
--- a/main.cpp
+++ b/main.cpp
@@ -182,8 +182,8 @@ void init(void)
 	
     //m = LoadModel("groundsphere.obj");
 
-	texID1 = LoadTexture("Substance_Normal92df.jpg", 1); // Flipped. Klipper?! FIXAD!
-	//texID1 = LoadTexture("normal.jpg", 1); // Flipped. Klipper?! FIXAD!
+	//texID1 = LoadTexture("Substance_Normal92df.jpg", 1); // Flipped. Klipper?! FIXAD!
+	texID1 = LoadTexture("normal.jpg", 1); // Flipped. Klipper?! FIXAD!
 
 // Defaults to unit 0
 	glUniform1i(glGetUniformLocation(program,"texUnit"),0);
diff --git a/shaders/ray.frag b/shaders/ray.frag
index 72ea88b..858644a 100644
--- a/shaders/ray.frag
+++ b/shaders/ray.frag
@@ -62,7 +62,7 @@ vec3 CameraRay(float fieldOfViewY, float aspectRatio, vec2 point)
 vec2 UV(vec3 intersection, int ID)
 {
 	vec3 d = normalize(intersection - object_descriptor[ID]);
-	float U = 0.5 + atan(d.x, d.z)/(2.0*3.141592);
+	float U = 0.5 + atan(d.z, d.x)/(2.0*3.141592);
 	float V = 0.5 + asin(d.y)/3.141592;
 	return vec2(U,V);
 }
@@ -76,7 +76,7 @@ float thetaSphere(vec3 intersection, int ID)
 
 vec3 theta_hat(float theta)
 {
-	vec3 theta_hat = vec3(-cos(theta),-sin(theta), 0);
+	vec3 theta_hat = vec3(-cos(theta),sin(theta), 0);
 	return theta_hat;
 }
 
@@ -207,6 +207,11 @@ vec3 CalculateNormal(vec3 intersection_point, int id)
 			mat3 tbn = TBN(N,B,T);
 			vec2 uv = UV(intersection_point, id);
 			vec3 normal = normalize(texture(texUnit, uv).rgb*2.0 - 1.0);
+			normal = tbn * normal;
+			//if (dot(N, normal) < 0)
+			//{
+			//	normal = -normal;
+			//}
 			return normal;
 
 		}
@@ -320,7 +325,7 @@ void main(void)
 
 		if ((closest_id>=0) && (closest_distance<1500))
 		{
-			int nr_reflections = 3;
+			int nr_reflections = 5;
 			int reflections = 0;
 			int closest_id_temp = -1;
 			for (int i = 0; i<nr_reflections; i++)
-- 
GitLab