Merge branch 'master' into obj-loader

This commit is contained in:
Riku Avelar 2016-12-02 17:57:31 -05:00
commit 45e775b8f9
3 changed files with 69 additions and 10 deletions

View File

@ -30,16 +30,16 @@ vec4 calcDirLight(vec4 tex, vec3 fPos, vec3 fNorm) {
if(useNormalMap) { if(useNormalMap) {
vec3 vNorm = texture(texNormal, texCoords).rgb; vec3 vNorm = texture(texNormal, texCoords).rgb;
nfNormal = -normalize(normalMatrix * vNorm); nfNormal = normalMatrix * normalize(2 * vNorm - 1);
} else { } else {
nfNormal = normalize(fNorm); nfNormal = normalize(fNorm);
} }
// Compute diffuse component // Compute diffuse component
float diff = 0.2*max(0.0, dot(nfNormal, -LightDirection)); float diff = 0.2*max(0.0, dot(nfNormal, -LightDirection));
// Compute specular component // Compute specular component
vec3 Rl = reflect(LightDirection, nfNormal); vec3 Rl = reflect(-LightDirection, nfNormal);
float spec = 0.2*pow(max(0.0, dot(/*normalMatrix */ Rl, nviewDirection)), 64); float spec = 0.2*pow(max(0.0, dot(/*normalMatrix */ Rl, nviewDirection)), 64);
// Compute ambient component // Compute ambient component
@ -60,7 +60,8 @@ vec4 calcPointLight(vec4 tex, vec3 fPos, vec3 fNorm, int i) {
if(useNormalMap) { if(useNormalMap) {
vec3 vNorm = texture(texNormal, texCoords).rgb; vec3 vNorm = texture(texNormal, texCoords).rgb;
nfNormal = -normalize(normalMatrix * vNorm); //nfNormal = normalize(normalMatrix * vNorm);
nfNormal = normalMatrix * normalize(2 * vNorm - 1);
} else { } else {
nfNormal = normalize(fNorm); nfNormal = normalize(fNorm);
} }

View File

@ -232,13 +232,13 @@ void Viewer::draw()
void Viewer::drawUi(){ void Viewer::drawUi(){
glCullFace(GL_FRONT); glCullFace(GL_BACK);
glClear(GL_DEPTH_BUFFER_BIT); // make ui always on top glClear(GL_DEPTH_BUFFER_BIT); // make ui always on top
QMatrix4x4 projectionMatrix; QMatrix4x4 projectionMatrix;
QMatrix4x4 uiViewMatrix; QMatrix4x4 uiViewMatrix;
uiViewMatrix.translate(0, -1.5, -4); uiViewMatrix.translate(0, -1.45, -4);
camera()->getProjectionMatrix(projectionMatrix); camera()->getProjectionMatrix(projectionMatrix);
float colorMult = 0.2 + std::fabs(0.8 * cos(std::fmod(angle_mult * frame + 300, 360) / 360 * M_PI)); float colorMult = 0.2 + std::fabs(0.8 * cos(std::fmod(angle_mult * frame + 300, 360) / 360 * M_PI));
@ -254,9 +254,13 @@ void Viewer::drawUi(){
{ {
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
TexturePrograms[i]->bind(); TexturePrograms[i]->bind();
m_program->setUniformValue(m_mvMatrixLocation, uiViewMatrix);
uiViewMatrix.translate(1.2, 0, 0); uiViewMatrix.translate(1.2, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 36); if(i == selectedTexture)
uiViewMatrix.scale(1.2);
m_program->setUniformValue(m_mvMatrixLocation, uiViewMatrix);
glDrawArrays(GL_TRIANGLES, 0, 6);
if(i == selectedTexture)
uiViewMatrix.scale(1/1.2);
} }
} }
@ -302,7 +306,9 @@ void Viewer::mousePressEvent(QMouseEvent* e) {
container->addChild(c); container->addChild(c);
root.addChild(container); root.addChild(container);
} }
else QGLViewer::mousePressEvent(e); else{
QGLViewer::mousePressEvent(e);
}
} }
void Viewer::mouseReleaseEvent(QMouseEvent* e) { void Viewer::mouseReleaseEvent(QMouseEvent* e) {
@ -314,6 +320,56 @@ void Viewer::mouseReleaseEvent(QMouseEvent* e) {
QGLViewer::mouseReleaseEvent(e); QGLViewer::mouseReleaseEvent(e);
} }
void Viewer::keyPressEvent(QKeyEvent* e) {
switch ( e->key() ) {
case Qt::Key_W:
break;
case Qt::Key_A:
break;
case Qt::Key_S:
break;
case Qt::Key_D:
break;
case Qt::Key_Q:
break;
case Qt::Key_E:
break;
case Qt::Key_1: // 0x31; yaay, fall-through cases!
case Qt::Key_2: // 0x32
case Qt::Key_3: // 0x33
case Qt::Key_4: // 0x34
case Qt::Key_5: // 0x35
case Qt::Key_6: // 0x36
selectedTexture = e->key() - 0x31;
if(selectedObj.shape != nullptr ){
selectedObj.shape->setType(selectedTexture);
}
break;
default: e->ignore(); break;
}
}
void Viewer::keyReleaseEvent(QKeyEvent* e){
switch ( e->key() ) {
case Qt::Key_W:
break;
case Qt::Key_A:
break;
case Qt::Key_S:
break;
case Qt::Key_D:
break;
case Qt::Key_Q:
break;
case Qt::Key_E:
break;
default: e->ignore(); break;
}
}
void Viewer::init() void Viewer::init()
{ {
identityMatrix.setToIdentity(); identityMatrix.setToIdentity();
@ -325,6 +381,7 @@ void Viewer::init()
showEntireScene(); showEntireScene();
// Init OpenGL objects // Init OpenGL objects
//setMouseBinding(Qt::NoModifier, Qt::LeftButton, CAMERA, LOOK_AROUND, true);
connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &Viewer::cleanup); connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &Viewer::cleanup);
initializeOpenGLFunctions(); initializeOpenGLFunctions();
@ -524,7 +581,6 @@ void Viewer::initShaders()
}//*/ }//*/
} }
// Creates the basic shapes in memory. We only have 3, so we just prep them all in advance.
void Viewer::initGeometries() void Viewer::initGeometries()
{ {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

View File

@ -95,6 +95,8 @@ protected :
virtual void mouseMoveEvent(QMouseEvent* e); virtual void mouseMoveEvent(QMouseEvent* e);
virtual void mouseReleaseEvent(QMouseEvent* e); virtual void mouseReleaseEvent(QMouseEvent* e);
virtual void mousePressEvent(QMouseEvent *e); virtual void mousePressEvent(QMouseEvent *e);
virtual void keyPressEvent(QKeyEvent *);
virtual void keyReleaseEvent(QKeyEvent *);
SceneGroup root; SceneGroup root;
std::stack<QMatrix4x4> modelStack; std::stack<QMatrix4x4> modelStack;