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; } }
void MyGLWidget::paintTerra() { modelTransform(); // Activem el VAO per a pintar el terra glBindVertexArray (VAO_Terra); // pintem glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); }
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); }
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 (); } }
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(); }
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(); }
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(); }
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(); }
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(); } }
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(); }
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); }
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); }