fucking around with lighting shaders and the speed of sound

This commit is contained in:
Dmitri K 2016-11-18 17:51:49 -05:00
parent b985770871
commit 489578ba10
3 changed files with 285 additions and 276 deletions

View File

@ -25,14 +25,15 @@ vec4 calcDirLight(vec4 tex, vec3 fPos, vec3 fNorm) {
vec3 nviewDirection = normalize(fPos); vec3 nviewDirection = normalize(fPos);
// Compute diffuse component // Compute diffuse component
float diff = 0.4 * max(0.0, dot(nfNormal, LightDirection)); float diff = 0.4*max(0.0, dot(nfNormal, -LightDirection));
// Compute specular component // Compute specular component
vec3 Rl = normalize(-LightDirection+2.0*nfNormal*dot(nfNormal,LightDirection)); //vec3 Rl = normalize(-LightDirection+2.0*nfNormal*dot(nfNormal,LightDirection));
float spec = 0.4*pow(max(0.0, dot(Rl, nviewDirection)), 16); vec3 Rl = reflect(LightDirection, fNorm);
float spec = pow(max(0.0, dot(Rl, nviewDirection)), 64);
// Compute ambient component // Compute ambient component
float amb = 0.02; float amb = 0.2;
//return vec4(0); //return vec4(0);
return vec4(tex.xyz * (amb + diff + spec), tex.w); return vec4(tex.xyz * (amb + diff + spec), tex.w);
@ -86,10 +87,10 @@ main()
vec3 nfNormal = normalize(fNormal); vec3 nfNormal = normalize(fNormal);
vec3 nviewDirection = normalize(fPosition); vec3 nviewDirection = normalize(fPosition);
fColor = calcDirLight(texColor, fPosition, fNormal) fColor = calcDirLight(texColor, fPosition, fNormal);
+ calcPointLight(texColor, fPosition, fNormal, 0)/4 //+ calcPointLight(texColor, fPosition, fNormal, 0)/4
+ calcPointLight(texColor, fPosition, fNormal, 1)/4 //+ calcPointLight(texColor, fPosition, fNormal, 1)/4
+ calcPointLight(texColor, fPosition, fNormal, 2)/4; //+ calcPointLight(texColor, fPosition, fNormal, 2)/4;
} else { } else {
fColor = texColor + ifColor; fColor = texColor + ifColor;
} }

View File

@ -24,7 +24,7 @@ out vec3 fNormal;
vec4 calcDirLight(vec4 eye, vec3 fPos, vec3 fNorm) { vec4 calcDirLight(vec4 eye, vec3 fPos, vec3 fNorm) {
// Get lighting vectors // Get lighting vectors
vec3 LightDirection = normalize(lDirection); vec3 LightDirection = normalize(lDirection);
vec3 nfNormal = normalize(fNorm); vec3 nfNormal = normalize(fNorm - fPos);
vec3 nviewDirection = normalize(fPos); vec3 nviewDirection = normalize(fPos);
// Compute diffuse component // Compute diffuse component

View File

@ -146,7 +146,7 @@ void Viewer::draw()
camera()->getProjectionMatrix(projectionMatrix); camera()->getProjectionMatrix(projectionMatrix);
camera()->getModelViewMatrix(modelViewMatrix); camera()->getModelViewMatrix(modelViewMatrix);
//modelViewMatrix.rotate(30,0,1,0); modelViewMatrix.rotate(30,0,1,0);
m_program->setUniformValue(m_projMatrixLocation, projectionMatrix); m_program->setUniformValue(m_projMatrixLocation, projectionMatrix);
m_program->setUniformValue(m_mvMatrixLocation, modelViewMatrix); m_program->setUniformValue(m_mvMatrixLocation, modelViewMatrix);
@ -154,7 +154,7 @@ void Viewer::draw()
// Adjust sun position // Adjust sun position
float rotAngle = std::fmod(angle_mult * frame, 360); float rotAngle = std::fmod(angle_mult * frame, 360);
sunRotate.rotate(rotAngle, 1, 0, 0); sunRotate.rotate(rotAngle, 0, 0, 1);
m_program->setUniformValue(m_lDirLoc, (modelViewMatrix * sunRotate * sun)); m_program->setUniformValue(m_lDirLoc, (modelViewMatrix * sunRotate * sun));
selection->transform.setToIdentity(); selection->transform.setToIdentity();
@ -164,7 +164,7 @@ void Viewer::draw()
modelStack.push(modelViewMatrix); modelStack.push(modelViewMatrix);
root.accept(*this); root.accept(*this);
frame += 2; frame += 20;
sunRotate.setToIdentity(); sunRotate.setToIdentity();
//float rotAngle = (frame * angle_mult) % 360; //float rotAngle = (frame * angle_mult) % 360;
@ -196,8 +196,7 @@ void Viewer::mousePressEvent(QMouseEvent* e) {
container->transform = selectedPosition; container->transform = selectedPosition;
container->addChild(c); container->addChild(c);
root.addChild(container); root.addChild(container);
} } else QGLViewer::mousePressEvent(e);
QGLViewer::mousePressEvent(e);
} }
void Viewer::mouseReleaseEvent(QMouseEvent* e) { void Viewer::mouseReleaseEvent(QMouseEvent* e) {
@ -259,15 +258,15 @@ void Viewer::init()
root.addChild(selection); root.addChild(selection);
s1->transform.rotate(360 * 1/3,0,1,0); s1->transform.rotate(360 * 1/3,0,1,0);
s1->transform.translate(1,0,0); s1->transform.translate(0.3,1,0);
s1->transform.scale(0.05); s1->transform.scale(0.05);
s1->setColor(*c1); s1->setColor(*c1);
s2->transform.rotate(360 * 2/3,0,1,0); s2->transform.rotate(360 * 2/3,0,1,0);
s2->transform.translate(1,0,0); s2->transform.translate(0.3,1,0);
s2->transform.scale(0.05); s2->transform.scale(0.05);
s2->setColor(*c2); s2->setColor(*c2);
s3->transform.rotate(360 * 3/3,0,1,0); s3->transform.rotate(360 * 3/3,0,1,0);
s3->transform.translate(1,0,0); s3->transform.translate(0.3,1,0);
s3->transform.scale(0.05); s3->transform.scale(0.05);
s3->setColor(*c3); s3->setColor(*c3);
@ -279,24 +278,10 @@ void Viewer::init()
cube->setColor(*c1); cube->setColor(*c1);
cube->setType(1); cube->setType(1);
sc->addChild(cube); sc->addChild(cube);
sc->transform.translate(-5+i, -5, -5+j); sc->transform.translate(-5+i, 0, -5+j);
root.addChild(sc); root.addChild(sc);
} }
} }
/*
Shape* cube1 = new Cube();
Shape* cube2 = new Cube();
Shape* cube3 = new Cube();
cube1->setColor(*c1);
cube2->setColor(*c2);
cube3->setColor(*c3);
cube2->transform.translate(3, 0, 0);
cube3->transform.translate(-3, 0, 0);
//*/
// uncomment this and the quaternion transformation in draw()
// to see the cube rotate. This is how we can easily make the sun.
// cube->transform.translate(3, 0, 0);
} }
} }
@ -568,10 +553,10 @@ void Viewer::initGeometries()
glGenBuffers(NumBuffers, m_Buffers); glGenBuffers(NumBuffers, m_Buffers);
// Fill cube vertex VBO // Fill cube vertex VBO
GLsizeiptr offsetVertices = 0; GLsizeiptr offsetVertices = 0;
GLsizeiptr offsetNormals = sizeof(verticesCube); GLsizeiptr offsetNormals = sizeof(verticesCube);
GLsizeiptr offsetUV = offsetNormals + sizeof(normals); GLsizeiptr offsetUV = offsetNormals + sizeof(normals);
GLsizeiptr dataSize = offsetUV + sizeof(uvs); GLsizeiptr dataSize = offsetUV + sizeof(uvs);
@ -593,6 +578,29 @@ void Viewer::initGeometries()
glVertexAttribPointer(s_vUvLocation, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(offsetUV)); glVertexAttribPointer(s_vUvLocation, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(offsetUV));
glEnableVertexAttribArray(s_vUvLocation); glEnableVertexAttribArray(s_vUvLocation);
/*GLsizeiptr offsetVertices = 0;
GLsizeiptr offsetNormals = sizeof(verticesCube);
GLsizeiptr offsetUV = offsetNormals + sizeof(normals);
GLsizeiptr dataSize = offsetUV + sizeof(uvs);
glBindVertexArray(m_VAOs[VAO_Cube]);
glBindBuffer(GL_ARRAY_BUFFER, m_Buffers[VBO_Cube]);
glBufferData(GL_ARRAY_BUFFER, dataSize, NULL, GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, offsetVertices, sizeof(verticesCube), verticesCube);
glBufferSubData(GL_ARRAY_BUFFER, offsetNormals, sizeof(normals), normals);
glBufferSubData(GL_ARRAY_BUFFER, offsetUV, sizeof(uvs), uvs);
glVertexAttribPointer(m_vPositionLocation, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(m_vPositionLocation);
glVertexAttribPointer(m_vNormalLocation, 3, GL_FLOAT, GL_TRUE, 0, BUFFER_OFFSET(sizeof(offsetNormals)));
glEnableVertexAttribArray(m_vNormalLocation);
glVertexAttribPointer(s_vUvLocation, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(sizeof(offsetUV)));
glEnableVertexAttribArray(s_vUvLocation);//*/
// Fill Sphere VBO // Fill Sphere VBO