#include #include "myglwidget.h" #include "scene.h" #include "glassert.h" #include "camera.h" #include "sphere.h" #include "phongmaterial.h" #include "skybox.h" #include "utils.h" #include "texture.h" #include "gridmesh.h" #include "sparrowrenderer.h" #include "focuscontroller.h" #include #include #include #include #include MyGLWidget::MyGLWidget(QWidget *parent) : QGLWidget(parent), renderer(NULL), controller(NULL) {} MyGLWidget::~MyGLWidget() { if(renderer != NULL) delete(renderer); if(controller != NULL) delete(controller); } Scene* MyGLWidget::buildScene() { Scene* scene = new Scene(); Camera* cam = new Camera(width(), height()); cam->moveTo(glm::vec3(0, 0, 3)); cam->lookAt(glm::vec2(0, 0)); scene->setCamera(cam); std::string filenames[6] = { "../data/skybox_ft", "../data/skybox_bk", "../data/skybox_up", "../data/skybox_dn", "../data/skybox_lf", "../data/skybox_rt" }; SkyBox* skybox = new SkyBox(filenames); scene->addEntity(skybox); Mesh* myGrid = new GridMesh(10, 10, true); //new Sphere(2); myGrid->initGL(); std::string vertSource = Utils::fileToString("../phong.vert"); std::string fragSource = Utils::fileToString("../phong.frag"); Shader* shader = new Shader(vertSource, fragSource); PhongMaterial* mat = new PhongMaterial(shader, glm::vec3(1), glm::vec3(1), 20.0f); Texture* tex = new Texture(); // new Texture("../data/noise.png"); mat->setTexture(tex); Entity* myEntity = new Entity(NULL, myGrid, mat); glm::mat4* transform = myEntity->getTransform(); *transform = glm::translate(glm::rotate(glm::scale(*transform, glm::vec3(4)), 3.1416f/2, glm::vec3(-1, 0, 0)), glm::vec3(-0.5f, -0.5f, 0)); scene->addEntity(myEntity); scene->addDirectionnalLight(glm::vec3(6, 4, -4), glm::vec3(0.7f, 0.6f, 0.4f)); // sun scene->addPointLight(glm::vec3(0, 0, 4), glm::vec3(0.7f, 0.6f, 0.4f)); return scene; } void MyGLWidget::initializeGL() { if(renderer != NULL) delete(renderer); renderer = new SparrowRenderer(width(), height()); Scene* scene = buildScene(); controller = new FocusController(new glm::vec3(0)); renderer->setScene(scene); controller->setScene(scene); } void MyGLWidget::resizeGL(int width, int height) { renderer->resize(width, height); updateGL(); } void MyGLWidget::paintGL() { renderer->render(); } void MyGLWidget::mouseMoveEvent(QMouseEvent *e) { controller->mouseMove(e->pos().x() - last.x(), e->pos().y() - last.y()); last = e->pos(); updateGL(); } void MyGLWidget::mousePressEvent(QMouseEvent* e) { controller->mouseEvent(e->button(), true); last = e->pos(); updateGL(); } void MyGLWidget::mouseReleaseEvent(QMouseEvent* e) { controller->mouseEvent(e->button(), false); updateGL(); } void MyGLWidget::wheelEvent(QWheelEvent *e) { controller->mouseWheelEvent(e->delta()); updateGL(); } void MyGLWidget::keyPressEvent(QKeyEvent *e) { controller->mouseEvent(e->key(), true); updateGL(); } void MyGLWidget::keyReleaseEvent(QKeyEvent *e) { controller->mouseEvent(e->key(), false); updateGL(); }