From b1a838d1701d54d60ea1b2f66efbec84ffe06af6 Mon Sep 17 00:00:00 2001 From: Riku Avelar Date: Wed, 9 Nov 2016 16:52:31 -0500 Subject: [PATCH] Working camera --- log750-lab.pro | 6 ++--- src/shaders/skyboxShader.frag | 10 +++++++ src/shaders/skyboxShader.vert | 15 +++++++++++ src/shaders/skyboxshader.frag | 4 +-- src/viewer/simpleViewer.cpp | 51 +++++++++++++++++------------------ 5 files changed, 55 insertions(+), 31 deletions(-) create mode 100644 src/shaders/skyboxShader.frag create mode 100644 src/shaders/skyboxShader.vert diff --git a/log750-lab.pro b/log750-lab.pro index 6fa8823..02183d3 100644 --- a/log750-lab.pro +++ b/log750-lab.pro @@ -53,9 +53,9 @@ HEADERS += QGLViewer/camera.h \ DISTFILES += src/shaders/basicShader.vert \ src/shaders/basicShader.frag \ - src/shaders/skyboxshader.frag \ - src/shaders/skyboxshader.vert \ - src/data/skybox.jpg + src/data/skybox.jpg \ + src/shaders/skyboxShader.frag \ + src/shaders/skyboxShader.vert FORMS += QGLViewer/ImageInterface.ui mainwindow.ui diff --git a/src/shaders/skyboxShader.frag b/src/shaders/skyboxShader.frag new file mode 100644 index 0000000..ad7760d --- /dev/null +++ b/src/shaders/skyboxShader.frag @@ -0,0 +1,10 @@ +#version 400 core +in vec3 texCoords; +out vec4 fColor; + +uniform sampler2D skybox; + +void main() +{ + fColor = texture(skybox, texCoords.xy); +} diff --git a/src/shaders/skyboxShader.vert b/src/shaders/skyboxShader.vert new file mode 100644 index 0000000..50e7021 --- /dev/null +++ b/src/shaders/skyboxShader.vert @@ -0,0 +1,15 @@ +#version 400 core +layout (location = 0) in vec3 position; + +uniform mat4 mvMatrix; +uniform mat4 projMatrix; +out vec3 texCoords; +in vec4 vPosition; + +void +main() +{ + gl_Position = projMatrix * mvMatrix * vPosition; + texCoords = position; +} + diff --git a/src/shaders/skyboxshader.frag b/src/shaders/skyboxshader.frag index 3637651..ad7760d 100644 --- a/src/shaders/skyboxshader.frag +++ b/src/shaders/skyboxshader.frag @@ -1,10 +1,10 @@ #version 400 core -in vec2 texCoords; +in vec3 texCoords; out vec4 fColor; uniform sampler2D skybox; void main() { - fColor = textureCube(skybox, texCoords); + fColor = texture(skybox, texCoords.xy); } diff --git a/src/viewer/simpleViewer.cpp b/src/viewer/simpleViewer.cpp index 2fae4b9..92c41c5 100644 --- a/src/viewer/simpleViewer.cpp +++ b/src/viewer/simpleViewer.cpp @@ -88,13 +88,12 @@ void Viewer::drawSkybox() // Increase size of skybox - modelViewMatrix.scale(100); + //modelViewMatrix.scale(3); skyboxRenderShaderProgram->setUniformValue(s_projMatrixLocation, projectionMatrix); skyboxRenderShaderProgram->setUniformValue(s_mvMatrixLocation, modelViewMatrix); // skyboxRenderShaderProgram->setAttributeValue(s_colorLocation, ); - int faces = floor(numVerticesCube/6); for(int i = 0; i < faces; i++){ // 6 vertexes par face glBindVertexArray(m_VAOs[VAO_Cube]); @@ -106,6 +105,7 @@ void Viewer::drawSkybox() void Viewer::draw() { drawSkybox(); + // Bind our vertex/fragment shaders m_program->bind(); @@ -117,8 +117,7 @@ void Viewer::draw() // Prepare a transformation stack - // stack modelStack; - modelViewMatrix.scale(0.95); + // stack modelStack; //modelViewMatrix.rotate(45, 0, 1, 0); // uncomment this and the cube translation in init() @@ -134,15 +133,15 @@ void Viewer::draw() // Traverse the Scene in order to draw its components modelStack.push(modelViewMatrix); - root.accept(*this); - frame++; + //root.accept(*this); + frame++; update(); } void Viewer::mouseMoveEvent(QMouseEvent* e) { //cout << "Viewer::mouseMoveEvent(QMouseEvent* e)" << endl; // Normal QGLViewer behavior. - //QGLViewer::mouseMoveEvent(e); + QGLViewer::mouseMoveEvent(e); } void Viewer::mousePressEvent(QMouseEvent* e) { @@ -156,6 +155,7 @@ void Viewer::mousePressEvent(QMouseEvent* e) { Shape* selectedShape = pickGeom(x, y); // OpenGL coords start at the window's bottom-left, not the frame's. ugh. + QGLViewer::mousePressEvent(e); } void Viewer::deselect(){ @@ -175,18 +175,17 @@ void Viewer::deselect(){ void Viewer::mouseReleaseEvent(QMouseEvent* e) { //cout << "Viewer::mouseReleaseEvent(QMouseEvent* e)" << endl; - //QGLViewer::mouseReleaseEvent(e); + QGLViewer::mouseReleaseEvent(e); } void Viewer::init() { - // We want to restrict ourselves to a 2D viewer. - //camera()->setType(qglviewer::Camera::ORTHOGRAPHIC); - /*setMouseBinding(Qt::NoModifier, Qt::LeftButton, CAMERA, SCREEN_ROTATE); - setMouseBinding(Qt::AltModifier, Qt::LeftButton, CAMERA, NO_MOUSE_ACTION);*/ -// setMouseBinding(Qt::NoModifier, Qt::MouseButton(Qt::LeftButton + Qt::MidButton), CAMERA, NO_MOUSE_ACTION); -// setMouseBinding(Qt::ControlModifier, Qt::MouseButton(Qt::LeftButton + Qt::MidButton), CAMERA, NO_MOUSE_ACTION); -// setMouseBinding(Qt::ShiftModifier, Qt::MouseButton(Qt::LeftButton + Qt::MidButton), CAMERA, NO_MOUSE_ACTION); + //camera()->setType(qglviewer::Camera::PERSPECTIVE); + //setMouseBinding(Qt::NoModifier, Qt::LeftButton, CAMERA, SCREEN_ROTATE); + //setMouseBinding(Qt::AltModifier, Qt::LeftButton, CAMERA, NO_MOUSE_ACTION); + //setMouseBinding(Qt::NoModifier, Qt::MouseButton(Qt::LeftButton + Qt::MidButton), CAMERA, NO_MOUSE_ACTION); + //setMouseBinding(Qt::ControlModifier, Qt::MouseButton(Qt::LeftButton + Qt::MidButton), CAMERA, NO_MOUSE_ACTION); + //setMouseBinding(Qt::ShiftModifier, Qt::MouseButton(Qt::LeftButton + Qt::MidButton), CAMERA, NO_MOUSE_ACTION); // Our scene will be from -5 to 5 in X and Y (the grid will be 10x10). setSceneRadius(5); @@ -249,8 +248,8 @@ void Viewer::initShaders() /* * Adding Texture Shader - * */ + /* textureRenderShaderprogram = new QOpenGLShaderProgram; if (!textureRenderShaderprogram->addShaderFromSourceFile(QOpenGLShader::Vertex, "src/shaders/textureShader.vert")) { cerr << "Unable to load Shader" << endl @@ -264,41 +263,41 @@ void Viewer::initShaders() } textureRenderShaderprogram->link(); - +*/ /* * Adding Skybox Shaders * */ skyboxRenderShaderProgram = new QOpenGLShaderProgram; - if (!skyboxRenderShaderProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, "src/shaders/skyboxshader.vert")) { + if (!skyboxRenderShaderProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, "src/shaders/skyboxShader.vert")) { cerr << "Unable to load Shader" << endl << "Log file:" << endl; qDebug() << skyboxRenderShaderProgram->log(); } - if (!skyboxRenderShaderProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, "src/shaders/skyboxshader.frag")) { + if (!skyboxRenderShaderProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, "src/shaders/skyboxShader.frag")) { cerr << "Unable to load Shader" << endl << "Log file:" << endl; qDebug() << skyboxRenderShaderProgram->log(); } skyboxRenderShaderProgram->link(); + skyboxRenderShaderProgram->bind(); - if ((s_texCoordsLocation = m_program->attributeLocation("texCoords")) < 0) - qDebug() << "Unable to find shader location for " << "vPosition"; +// if ((s_texCoordsLocation = m_program->attributeLocation("texCoords")) < 0) +// qDebug() << "Unable to find shader location for " << "vPosition"; if ((s_vPositionLocation = m_program->attributeLocation("vPosition")) < 0) qDebug() << "Unable to find shader location for " << "vPosition"; - if ((s_mvMatrixLocation = m_program->uniformLocation("mvMatrix")) < 0) - qDebug() << "Unable to find shader location for " << "mvMatrix"; if ((s_projMatrixLocation = m_program->uniformLocation("projMatrix")) < 0) qDebug() << "Unable to find shader location for " << "projMatrix"; - if ((s_skyboxCubemapLocation = m_program->uniformLocation("cubemap")) < 0) - qDebug() << "Unable to find shader location for " << "projMatrix"; - s_texture = new QOpenGLTexture(QImage("../data/skybox.jpg").mirrored()); + if ((s_mvMatrixLocation = m_program->uniformLocation("mvMatrix")) < 0) + qDebug() << "Unable to find shader location for " << "mvMatrix"; + + s_texture = new QOpenGLTexture(QImage("src/data/skybox.jpg").mirrored()); s_texture->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear); s_texture->setMagnificationFilter(QOpenGLTexture::Linear); }