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