Exemple #1
0
void MyGLWidget::keyPressEvent(QKeyEvent* event)
{
    switch (event->key()) {
    case Qt::Key_Escape:
        exit(0);
    case Qt::Key_S: { // escalar a més gran
        scale += 0.01;
        modelTransform ();
        updateGL();
        break;
    }
    case Qt::Key_D: { // escalar a més petit
        scale -= 0.01;
        modelTransform ();
        updateGL();
        break;
    }
    case Qt::Key_R: {
        rotateP+=M_PI/20;
        modelTransform ();
        updateGL();
        break;
    }
    default:
        event->ignore();
        break;
    }
}
Exemple #2
0
void MyGLWidget::paintTerra()
{

    modelTransform();

    // Activem el VAO per a pintar el terra
    glBindVertexArray (VAO_Terra);

    // pintem
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
Exemple #3
0
void MyGLWidget::paintPatricio()
{
    float temp = rotate;
    rotate=rotateP;
    modelTransform();
    rotate = temp;
    // Activem el VAO per a pintar la caseta
    glBindVertexArray (VAO_Patricio);
    // pintem
    glDrawArrays (GL_TRIANGLES, 0, patricio.faces().size () * 3);
}
Exemple #4
0
void MyGLWidget::keyPressEvent(QKeyEvent *e)
{
  switch(e->key()){
    case Qt::Key_Escape:
      exit(0);
    case Qt::Key_S:
      scl +=0.1;
      glUniform1f(varLoc,scl);
      updateGL();
      break;
    case Qt::Key_D:
      scl -=0.1;
      glUniform1f(varLoc,scl);
      updateGL();
      break;
    case Qt::Key_Left:
      posx -=0.1;
      modelTransform();
      updateGL();
      break;
    case Qt::Key_Right:
      posx +=0.1;
      modelTransform();
      updateGL();
      break;
    case Qt::Key_Up:
      posy +=0.1;
      modelTransform();
      updateGL();
      break;
    case Qt::Key_Down:
      posy -=0.1;
      modelTransform();
      updateGL();
      break;
    default: e->ignore ();
    
  }

  
}
Exemple #5
0
void MyGLWidget::initializeGL () 
{
  // glew és necessari per cridar funcions de les darreres versions d'OpenGL
  glewExperimental = GL_TRUE;
  glewInit(); 
  glGetError();  // Reinicia la variable d'error d'OpenGL

  glClearColor(0.5, 0.7, 1.0, 1.0); // defineix color de fons (d'esborrat)
  carregaShaders();
  createBuffers();
  modelTransform ();
  projectTransform();
}
Exemple #6
0
void MyGLWidget::createBuffers ()
{
  glm::vec3 Vertices[3];  // Tres vèrtexs amb X, Y i Z
  Vertices[0] = glm::vec3(-1.0, -1.0, 0.0);
  Vertices[1] = glm::vec3(1.0, -1.0, 0.0);
  Vertices[2] = glm::vec3(0.0, 1.0, 0.0);



  
  // Creació del Vertex Array Object (VAO) que usarem per pintar
  glGenVertexArrays(1, &VAO);
  glBindVertexArray(VAO);

  // Creació del buffer amb les dades dels vèrtexs
  glGenBuffers(1, &VBO);
  glBindBuffer(GL_ARRAY_BUFFER, VBO);
  glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
  // Activem l'atribut que farem servir per vèrtex (només el 0 en aquest cas)	
  int posV = glGetAttribLocation(program->programId(), "vertex");
  glVertexAttribPointer(posV, 3, GL_FLOAT, GL_FALSE, 0, 0);
  glEnableVertexAttribArray(posV);

  // Desactivem el VAO
  glBindVertexArray(0);

  glm::vec3 Colores[3]; // Colores para cada vertice
  Colores[0] = glm::vec3(1.0, 0.0, 0.0);
  Colores[1] = glm::vec3(0.0, 1.0, 0.0);
  Colores[2] = glm::vec3(0.0, 0.0, 1.0);
  glBindVertexArray(VAO);
  //Creació del buffer amb dades dels vèrtexs
  glGenBuffers(1, &VBO2);
  glBindBuffer(GL_ARRAY_BUFFER, VBO2);
  glBufferData(GL_ARRAY_BUFFER, sizeof(Colores), Colores, GL_STATIC_DRAW);

  int posC = glGetAttribLocation(program->programId(), "color");
  glVertexAttribPointer(posC, 3, GL_FLOAT, GL_FALSE, 0, 0);
  glEnableVertexAttribArray(posC);
  glBindVertexArray(0);

  //scl = 0.5;
  rot = 0.0;
  //glUniform1f(varLoc,scl);

  vTrans = glm::vec3(0.0,0.0,0.0);
  vRot = glm::vec3(0.0,0.0,1.0);
  vScale = glm::vec3(0.5,0.5,0.5);
  modelTransform();
}
Exemple #7
0
void MyGLWidget::keyPressEvent(QKeyEvent* event)
{
  switch (event->key()) {
    makeCurrent();
    case Qt::Key_S: { // escalar a més gran
      scale += 0.05;
      modelTransform();
      break;
    }
    case Qt::Key_D: { // escalar a més petit
      scale -= 0.05;
      modelTransform();
      break;
    }
    case Qt::Key_R: {
      rotate += M_PI/4;
      modelTransformRot ();
      break;

    }
    default: event->ignore(); break;
  }
  update();
}
Exemple #8
0
void MyGLWidget::loadShaders ()
{
  QGLShader fs(QGLShader::Fragment, this);
  fs.compileSourceFile("./fragshad.frag");
  QGLShader vs(QGLShader::Vertex, this);
  vs.compileSourceFile("./vertshad.vert");
  
  program= new QGLShaderProgram(this);
  program->addShader(&fs);
  program->addShader(&vs);
  program ->link();
  program->bind();
  varLoc=glGetUniformLocation(program->programId(),"val");
  transLoc=glGetUniformLocation(program->programId(),"mati");
  glUniform1f(varLoc,scl);
  modelTransform();
  
}
Exemple #9
0
void MyGLWidget::keyPressEvent(QKeyEvent * e){
    switch(e->key()){
        case Qt::Key_Escape :
            exit(0);
        case Qt::Key_S :
            //scl += 0.1;
            //glUniform1f(varLoc,scl);
            vScale[0] += 0.1;
            vScale[1] += 0.1;
            vScale[2] += 0.1;
            modelTransform();
            updateGL();
            break;
        case Qt::Key_D :
            //scl -= 0.1;
            //glUniform1f(varLoc,scl);
            vScale[0] -= 0.1;
            vScale[1] -= 0.1;
            vScale[2] -= 0.1;
            modelTransform();
            updateGL();
            break;
        case Qt::Key_Left :
            vTrans[0] = vTrans[0] - 0.1; //--x
            rot += M_PI/4;
            modelTransform();
            updateGL();
            break;
        case Qt::Key_Right :
            vTrans[0] = vTrans[0] + 0.1; //++x
            rot += M_PI/4;
            modelTransform();
            updateGL();
            break;
        case Qt::Key_Down :
            vTrans[1] = vTrans[1] - 0.1; //--y
            rot += M_PI/4;
            modelTransform();
            updateGL();
            break;
        case Qt::Key_Up :
            vTrans[1] = vTrans[1] + 0.1; //++y
            rot += M_PI/4;
            modelTransform();
            updateGL();
            break;
        default: e->ignore();
    }
}
Exemple #10
0
void MyGLWidget::initializeGL ()
{
    // glew és necessari per cridar funcions de les darreres versions d'OpenGL
    glewExperimental = GL_TRUE;
    glEnable (GL_DEPTH_TEST);
    glewInit();
    glGetError();  // Reinicia la variable d'error d'OpenGL

    patricio.load("../models/Patricio.obj");
    scale = 1.0f;
    calcCapsaContenidora(patricio,patrMin,patrMax);
    ra=1;


    glClearColor(0.5, 0.7, 1.0, 1.0); // defineix color de fons (d'esborrat)
    carregaShaders();
    createBuffers();
    modelTransform ();
    projectTransform();
    viewTransform();
}
Exemple #11
0
void MyGLWidget::paintGL ()
{

  // Esborrem el frame-buffer (PER DEFECTE)
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  //Inicialitzem variables de la camera
  init_camera();

  //************OBJECTE 1 HOMER****************//

  // 1 .Project+View


  // 2. Transformacio del model a pintar
  modelTransformRot();

  // 3. Pintem objectes
  // Activem el VAO per a pintar homer
  glBindVertexArray (VAO_Homer);

  //View
  glDrawArrays (GL_TRIANGLES, 0, m.faces().size()*3);

  //************OBJECTE 2 TERRA***************//


  //Tranformacio del model  (nomes es torna a aplicar el model
  //                        transform que es l'unic que volem
  //                        diferent)
  modelTransform ();

  glBindVertexArray (VAO_Terra);
  // pintem
  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

  glBindVertexArray (0);
}
Exemple #12
0
void MyGLWidget::paintGL ()
{

  glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);


  //glBindVertexArray (VAO_Casa);
  //glDrawArrays(GL_TRIANGLE_STRIP, 0, 5);

  modelTransform();

  glBindVertexArray(VAO_Homer);
  glDrawArrays(GL_TRIANGLES, 0, m.faces().size()*3);
/*
  modelTransformTierra(); // Antes de pintar el suelo
                          // Sin esta llamada, te rota tmb el suelo

  glBindVertexArray (VAO_Terra);
  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
*/
  glBindVertexArray (0);

}