diff --git a/src/viewer/simpleViewer.cpp b/src/viewer/simpleViewer.cpp index 83d05a0..557d2c1 100644 --- a/src/viewer/simpleViewer.cpp +++ b/src/viewer/simpleViewer.cpp @@ -173,6 +173,36 @@ void Viewer::draw() //float rotAngle = (frame * angle_mult) % 360; } +void Viewer::drawUi(){ + + glCullFace(GL_FRONT); + glClear(GL_DEPTH_BUFFER_BIT); // make ui always on top + + QMatrix4x4 projectionMatrix; + QMatrix4x4 uiViewMatrix; + + uiViewMatrix.translate(0, -1.5, -4); + camera()->getProjectionMatrix(projectionMatrix); + + float colorMult = 0.2 + std::fabs(0.8 * cos(std::fmod(angle_mult * frame + 300, 360) / 360 * M_PI)); + + m_program->setUniformValue(m_isSkyLoc, false); + m_program->setUniformValue(m_drawTextLoc, true); + m_program->setUniformValue(m_isLightLoc, true); + + glBindVertexArray(m_VAOs[VAO_Cube]); + uiViewMatrix.scale(.25, .25, .01); + uiViewMatrix.translate(-TEX_LENGTH/2.0, 0, 0); + for(int i = 0; ibind(); + m_program->setUniformValue(m_mvMatrixLocation, uiViewMatrix); + uiViewMatrix.translate(1.2, 0, 0); + glDrawArrays(GL_TRIANGLES, 0, 36); + } + +} + void Viewer::mouseMoveEvent(QMouseEvent* e) { //cout << "Viewer::mouseMoveEvent(QMouseEvent* e)" << endl; // Normal QGLViewer behavior. @@ -189,31 +219,32 @@ void Viewer::mousePressEvent(QMouseEvent* e) { PickedGeom selectedGeom = pickGeom(x, y); - if(!selectedGeom.position.isIdentity() && e->modifiers().testFlag(Qt::ControlModifier)) - { - if(selectedObj.shape->getParent() != nullptr) { - // Remove previous selection - selectedObj.shape->getParent()->getChildren()->erase( - std::remove(selectedObj.shape->getParent()->getChildren()->begin(), - selectedObj.shape->getParent()->getChildren()->end(), - selection), - selectedObj.shape->getParent()->getChildren()->end()); - } - selectedObj.shape = selectedGeom.shape; - selectedObj.shape->getParent()->addChild(selection); - cubeSelected(true); - } + if(!selectedGeom.position.isIdentity() && e->modifiers().testFlag(Qt::ControlModifier)) + { + std::cout << "Selecting cube" << endl; + if(selectedObj.shape->getParent() != nullptr) { + // Remove previous selection + selectedObj.shape->getParent()->getChildren()->erase( + std::remove(selectedObj.shape->getParent()->getChildren()->begin(), + selectedObj.shape->getParent()->getChildren()->end(), + selection), + selectedObj.shape->getParent()->getChildren()->end()); + } + selectedObj.shape = selectedGeom.shape; + selectedObj.shape->getParent()->addChild(selection); + cubeSelected(true); + } - if(!selectedGeom.position.isIdentity() && e->modifiers().testFlag(Qt::ShiftModifier)) - { - Cube* c = new Cube; - c->setType(TEX_WOODFLOOR); - SceneGroup* container = new SceneGroup; - //selectedPosition.copyDataTo(container->transform.data()); - container->transform = selectedGeom.position; - container->addChild(c); - root.addChild(container); - } else QGLViewer::mousePressEvent(e); + if(!selectedGeom.position.isIdentity() && e->modifiers().testFlag(Qt::ShiftModifier)) + { + Cube* c = new Cube; + c->setType(selectedTexture); + SceneGroup* container = new SceneGroup; + container->transform = selectedGeom.position; + container->addChild(c); + root.addChild(container); + } + else QGLViewer::mousePressEvent(e); } void Viewer::mouseReleaseEvent(QMouseEvent* e) { @@ -682,7 +713,9 @@ void Viewer::visit(Cube &s) for(int i =0; isetRgb(s.getColor().rgb() + i); - m_program->setUniformValue(m_colorLocation, *faceColor); + m_program->setUniformValue(m_colorLocation, *faceColor);/*/ + QColor* sideColor = new QColor(sideColors[i]); + m_program->setUniformValue(m_colorLocation, *sideColor);//*/ glDrawArrays(GL_TRIANGLES, i*6, 6); } @@ -802,7 +835,6 @@ void Viewer::deleteSelected() { cubeSelected(false); } - void Viewer::changeColor(QColor c){ if(activeCell->getChildren()->size()){ Shape* shape = dynamic_cast (activeCell->childAt(0)); @@ -825,34 +857,6 @@ void Viewer::startAniumation(){} void Viewer::stopAnimation(){} -void Viewer::drawUi(){ - - glCullFace(GL_FRONT); - - QMatrix4x4 projectionMatrix; - QMatrix4x4 uiViewMatrix; - - uiViewMatrix.translate(0, -1.5, -4); - camera()->getProjectionMatrix(projectionMatrix); - - float colorMult = 0.2 + std::fabs(0.8 * cos(std::fmod(angle_mult * frame + 300, 360) / 360 * M_PI)); - - m_program->setUniformValue(m_isSkyLoc, false); - m_program->setUniformValue(m_drawTextLoc, true); - m_program->setUniformValue(m_isLightLoc, true); - - glBindVertexArray(m_VAOs[VAO_Cube]); - uiViewMatrix.scale(.25, .25, .01); - uiViewMatrix.translate(-TEX_LENGTH/2.0, 0, 0); - for(int i = 0; ibind(); - m_program->setUniformValue(m_mvMatrixLocation, uiViewMatrix); - uiViewMatrix.translate(1.2, 0, 0); - glDrawArrays(GL_TRIANGLES, 0, 36); - } - -} PickedGeom Viewer::pickGeom(int x, int y){ @@ -863,6 +867,7 @@ PickedGeom Viewer::pickGeom(int x, int y){ m_program->setUniformValue(m_isPickingModeLoc, true); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + glCullFace(GL_BACK); isPickingActivated = true; @@ -916,9 +921,9 @@ PickedGeom Viewer::pickGeom(int x, int y){ QColor* pickedColor = new QColor(); pickedColor->setRgb(pdata[512-j][i][0], pdata[512-j][i][1], pdata[512-j][i][2]); - if(i==256 && j == 256) pickedColor->setRgba(0x88FFFFFF); + if(i==256 && j == 256) pickedColor->setRgba(0xFFFFFFFF); if(i==256 && j == 256) - std::cout<<"--- Color under cursor: " << (int)pdata[j][i][0] <<" "<< (int)pdata[j][i][1] <<" "<< (int)pdata[j][i][2] << endl; + std::cout<<"--- Color under cursor: " << (int)pdata[j][i][0] <<" "<< (int)pdata[j][i][1] <<" "<< (int)pdata[j][i][2] <<" "<< (int)pdata[j][i][3] << endl; pickedColor->setAlpha(255); im->setPixelColor(i, j, pickedColor->rgb()); } @@ -927,9 +932,9 @@ PickedGeom Viewer::pickGeom(int x, int y){ glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixelData); - QColor* pickedColor = new QColor(pixelData[0], pixelData[1], pixelData[2]); + QColor* pickedColor = new QColor(pixelData[0], pixelData[1], pixelData[2], pixelData[3]); unsigned int pickedInt = pickedColor->rgb() % 0x1000000; // rgb returns ARGB. go figure. - //std::cout << "Picked " << pickedInt << endl; + std::cout << "Picked " << pickedInt << endl; QMatrix4x4 pickedPosition = mapColorToPosition.value(pickedInt, identityMatrix); Shape* pickedShape = mapColorToShape.value(pickedInt); diff --git a/src/viewer/simpleViewer.h b/src/viewer/simpleViewer.h index 7daff12..5ed413e 100644 --- a/src/viewer/simpleViewer.h +++ b/src/viewer/simpleViewer.h @@ -162,6 +162,7 @@ private: TEX_LENGTH }; + unsigned int selectedTexture = TEX_WOODFLOOR; QString TexturePaths[TEX_LENGTH] = { "src/data/dry_ground.jpg",