#include #include "myglwidget.h" #include "glassert.h" #include "camera.h" #include "sphere.h" #include "phongmaterial.h" #include "skyboxmodule.h" #include "entity.h" #include "phongmodule.h" #include "utils.h" #include "lights.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); } void MyGLWidget::buildScene() { // init camera Camera* cam = renderer->getCamera(); cam->moveTo(glm::vec3(0, 0, 3)); cam->lookAt(glm::vec2(0, 0)); // create skybox module std::string filenames[6] = { "../data/skybox_ft", "../data/skybox_bk", "../data/skybox_up", "../data/skybox_dn", "../data/skybox_lf", "../data/skybox_rt" }; Texture* skyboxCubemap = new Texture(filenames); SkyboxModule* skybox = new SkyboxModule(skyboxCubemap); // create a mesh //Mesh* myGrid = new GridMesh(10, 10, true); //new Sphere(2); Mesh* myGrid = Utils::loadOBJ("../data/sword.obj"); myGrid->initGL(); // std::string vertSource = Utils::fileToString("../phong.vert"); std::string fragSource = Utils::fileToString("../phong.frag"); Shader* phongShader = new Shader(vertSource, fragSource); PhongMaterial* mat = new PhongMaterial(phongShader, glm::vec3(1), glm::vec3(1), 20.0f); Texture* tex = new Texture("../data/noise.png"); mat->setTexture(tex); Entity* myEntity = new Entity(myGrid, mat); glm::mat4* transform = myEntity->getTransform(); *transform = glm::scale(*transform, glm::vec3(0.01f)); Lights* directionnalLights = new Lights(); directionnalLights->addLight(glm::vec3(6, 4, -4), glm::vec3(0.7f, 0.6f, 0.4f)); // sun PhongModule* myPhongModule = new PhongModule(directionnalLights, new Lights(), phongShader); myPhongModule->addEntity(myEntity); renderer->addModule(skybox); renderer->addModule(myPhongModule); } void MyGLWidget::initializeGL() { if(renderer != NULL) delete(renderer); renderer = new SparrowRenderer(width(), height()); buildScene(); controller = new FocusController(new glm::vec3(0)); controller->setCamera(renderer->getCamera()); } 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(); }