From 9c79eca90d94e1dd95a0f868fa753ccec170d449 Mon Sep 17 00:00:00 2001 From: Dmitri K Date: Thu, 10 Nov 2016 20:30:21 -0500 Subject: [PATCH] tweaking lights and shit --- src/shaders/basicShader.frag | 40 ++++++++++++++++++------------------ src/viewer/simpleViewer.cpp | 20 +++++++++--------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/shaders/basicShader.frag b/src/shaders/basicShader.frag index 8901d6d..cedd8dd 100644 --- a/src/shaders/basicShader.frag +++ b/src/shaders/basicShader.frag @@ -24,40 +24,40 @@ vec4 calcDirLight(vec4 tex, vec3 fPos, vec3 fNorm) { vec3 nviewDirection = normalize(fPos); // Compute diffuse component - float diff = 0.65 * max(0.0, dot(nfNormal, LightDirection)); + float diff = 0.4 * max(0.0, dot(nfNormal, LightDirection)); // Compute specular component vec3 Rl = normalize(-LightDirection+2.0*nfNormal*dot(nfNormal,LightDirection)); - float spec = 0.1*pow(max(0.0, dot(Rl, nviewDirection)), 16); + float spec = 0.4*pow(max(0.0, dot(Rl, nviewDirection)), 16); // Compute ambient component - float amb = 0.05; + float amb = 0.02; //return vec4(0); - return vec4(tex.xyz * (amb + diff + spec), tex.w); + return vec4(tex.xyz * (amb + diff + spec), tex.w); } vec4 calcPointLight(vec4 tex, vec3 fPos, vec3 fNorm, int i) { // Get lighting vectors - vec3 LightDirection = normalize(fPos - pointLight[i]); - vec3 nfNormal = normalize(fNorm); - vec3 nviewDirection = normalize(fPos); + vec3 LightDirection = normalize(pointLight[i] + fPos); + vec3 nfNormal = normalize(fNorm); + vec3 nviewDirection = normalize(fPos); // Attenuation - float distance = length(pointLight[i] - nviewDirection); - float attenuation = 1.0f;// / (distance * distance); + float distance = length(nviewDirection - pointLight[i] - fPos) / 3; + float attenuation = 0.5 + 1 / max(0.25, distance * distance); // Compute diffuse component - float diff = 0.5 * max(0.0, dot(nfNormal, LightDirection)); + float diff = 0.3 * max(0.0, dot(nfNormal, LightDirection)); // Compute specular component - vec3 Rl = normalize(-LightDirection+2.0*nfNormal*dot(nfNormal,LightDirection)); - float spec = 0.5*pow(max(0.0, dot(Rl, nviewDirection)), 32); + vec3 Rl = reflect(-LightDirection, fNorm); + float spec = 0.5 * pow(max(0.0, dot(Rl, nviewDirection)), 32); // Compute ambient component - float amb = 0; + float amb = 0.2; - return vec4(1 * pointLightCol[i].xyz * attenuation * (amb + diff + spec), pointLightCol[i].w); + return vec4(pointLightCol[i].xyz * attenuation * (amb + diff + spec) * tex.xyz, pointLightCol[i].w); } void @@ -75,14 +75,14 @@ main() fColor = skyMult * normalize(texColor*texColor*texColor*2/1.41)*2; } else if(isPhong) { // Get lighting vectors - vec3 LightDirection = normalize(lDirection); - vec3 nfNormal = normalize(fNormal); + vec3 LightDirection = normalize(lDirection); + vec3 nfNormal = normalize(fNormal); vec3 nviewDirection = normalize(fPosition); - fColor = calcDirLight(texColor, fPosition, fNormal) - + calcPointLight(texColor, fPosition, fNormal, 0) - + calcPointLight(texColor, fPosition, fNormal, 1) - + calcPointLight(texColor, fPosition, fNormal, 2); + fColor = calcDirLight(texColor, fPosition, fNormal) + + calcPointLight(texColor, fPosition, fNormal, 0)/4 + + calcPointLight(texColor, fPosition, fNormal, 1)/4 + + calcPointLight(texColor, fPosition, fNormal, 2)/4; } else { fColor = texColor * ifColor; } diff --git a/src/viewer/simpleViewer.cpp b/src/viewer/simpleViewer.cpp index 58630d7..af001fc 100644 --- a/src/viewer/simpleViewer.cpp +++ b/src/viewer/simpleViewer.cpp @@ -259,16 +259,16 @@ void Viewer::init() Shape* s3 = new Sphere(); s1->transform.rotate(360 * 1/3,0,1,0); - s1->transform.translate(0.5,1,0); - s1->transform.scale(0.3); + s1->transform.translate(1,0,0); + s1->transform.scale(0.05); s1->setColor(*c1); s2->transform.rotate(360 * 2/3,0,1,0); - s2->transform.translate(0.5,1,0); - s2->transform.scale(0.3); + s2->transform.translate(1,0,0); + s2->transform.scale(0.05); s2->setColor(*c2); s3->transform.rotate(360 * 3/3,0,1,0); - s3->transform.translate(0.5,1,0); - s3->transform.scale(0.3); + s3->transform.translate(1,0,0); + s3->transform.scale(0.05); s3->setColor(*c3); // uncomment this and the quaternion transformation in draw() @@ -276,8 +276,8 @@ void Viewer::init() // cube->transform.translate(3, 0, 0); selection = new SceneGroup(); - selection->addChild(s1);; - selection->addChild(s2);; + selection->addChild(s1); + selection->addChild(s2); selection->addChild(s3); SceneGroup *c = new SceneGroup(); @@ -369,8 +369,8 @@ void Viewer::initShaders() if ((m_c3Loc = m_program->uniformLocation("pointLightCol[2]")) < 0) qDebug() << "Unable to find m_shader location for" << "pointLightCol[2]"; - m_program->setUniformValue(m_isPhongLoc, true); - m_program->setUniformValue(m_drawTextLoc, true); + m_program->setUniformValue(m_isPhongLoc, true); + m_program->setUniformValue(m_drawTextLoc, false); s_texture = new QOpenGLTexture(QImage("src/data/skybox.jpg"));/*/