added scenecontroller
This commit is contained in:
parent
a36b607ccf
commit
61c6f97da3
2
mesh.cpp
2
mesh.cpp
@ -78,6 +78,6 @@ void Mesh::draw()
|
|||||||
if(locked)
|
if(locked)
|
||||||
{
|
{
|
||||||
glAssert(glBindVertexArray(vao));
|
glAssert(glBindVertexArray(vao));
|
||||||
//glAssert(glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0));
|
glAssert(glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, indices.data()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
#include <glew/glew.h>
|
#include <glew/glew.h>
|
||||||
#include "myglwidget.h"
|
#include "myglwidget.h"
|
||||||
#include "sparrowrenderer.h"
|
#include "scene.h"
|
||||||
#include "glassert.h"
|
#include "glassert.h"
|
||||||
|
#include "camera.h"
|
||||||
|
#include "gridmesh.h"
|
||||||
|
#include "phongmaterial.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
|
||||||
MyGLWidget::MyGLWidget(QWidget *parent) :
|
MyGLWidget::MyGLWidget(QWidget *parent) :
|
||||||
QGLWidget(parent),
|
QGLWidget(parent),
|
||||||
renderer(NULL)
|
scene(NULL)
|
||||||
{
|
{}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MyGLWidget::~MyGLWidget()
|
MyGLWidget::~MyGLWidget()
|
||||||
{
|
{
|
||||||
if(renderer != NULL)
|
if(scene != NULL)
|
||||||
delete(renderer);
|
delete(scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::initializeGL()
|
void MyGLWidget::initializeGL()
|
||||||
@ -45,13 +48,25 @@ void MyGLWidget::initializeGL()
|
|||||||
glAssert(glEnable(GL_TEXTURE_2D));
|
glAssert(glEnable(GL_TEXTURE_2D));
|
||||||
glAssert(glViewport(0, 0, width(), height()));
|
glAssert(glViewport(0, 0, width(), height()));
|
||||||
|
|
||||||
renderer = new SparrowRenderer(width(), height());
|
buildScene();
|
||||||
|
controller.setScene(scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyGLWidget::buildScene()
|
||||||
|
{
|
||||||
|
scene = new Scene();
|
||||||
|
scene->setCamera(new Camera(width(), height()));
|
||||||
|
Mesh* myGrid = new GridMesh(2, 2, false);
|
||||||
|
myGrid->initGL();
|
||||||
|
Shader* shader = new Shader(QString("../phong.vert"), QString("../phong.frag"));
|
||||||
|
Material* mat = new PhongMaterial(shader);
|
||||||
|
scene->addEntity(myGrid, mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyGLWidget::resizeGL(int width, int height)
|
void MyGLWidget::resizeGL(int width, int height)
|
||||||
{
|
{
|
||||||
glAssert(glViewport(0, 0, width, height));
|
glAssert(glViewport(0, 0, width, height));
|
||||||
renderer->resize(width, height);
|
scene->getCamera()->resize(width, height);
|
||||||
updateGL();
|
updateGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,5 +74,33 @@ void MyGLWidget::paintGL()
|
|||||||
{
|
{
|
||||||
glAssert(glClearColor(0.60, 0.65, 0.75, 1.0));
|
glAssert(glClearColor(0.60, 0.65, 0.75, 1.0));
|
||||||
glAssert(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
|
glAssert(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
|
||||||
renderer->render();
|
scene->drawEntities();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyGLWidget::mouseMoveEvent(QMouseEvent *e)
|
||||||
|
{
|
||||||
|
static QPoint* last = NULL;
|
||||||
|
if(last == NULL)
|
||||||
|
last = new QPoint(e->pos().x(), e->pos().y());
|
||||||
|
else
|
||||||
|
controller.mouseMove(e->pos().x() - last->x(), e->pos().y() - last->y());
|
||||||
|
*last = e->pos();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyGLWidget::mousePressEvent(QMouseEvent* e)
|
||||||
|
{
|
||||||
|
controller.mouseEvent(e->button(), true);
|
||||||
|
}
|
||||||
|
void MyGLWidget::mouseReleaseEvent(QMouseEvent* e)
|
||||||
|
{
|
||||||
|
controller.mouseEvent(e->button(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyGLWidget::keyPressEvent(QKeyEvent *e)
|
||||||
|
{
|
||||||
|
controller.mouseEvent(e->key(), true);
|
||||||
|
}
|
||||||
|
void MyGLWidget::keyReleaseEvent(QKeyEvent *e)
|
||||||
|
{
|
||||||
|
controller.mouseEvent(e->key(), false);
|
||||||
}
|
}
|
||||||
|
15
myglwidget.h
15
myglwidget.h
@ -1,9 +1,10 @@
|
|||||||
#ifndef MYGLWIDGET_H
|
#ifndef MYGLWIDGET_H
|
||||||
#define MYGLWIDGET_H
|
#define MYGLWIDGET_H
|
||||||
|
|
||||||
|
#include "scenecontroller.h"
|
||||||
#include <QGLWidget>
|
#include <QGLWidget>
|
||||||
|
|
||||||
class SparrowRenderer;
|
class Scene;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class MyGLWidget;
|
class MyGLWidget;
|
||||||
@ -13,7 +14,8 @@ class MyGLWidget : public QGLWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
SparrowRenderer* renderer;
|
Scene* scene;
|
||||||
|
SceneController controller;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MyGLWidget(QWidget *parent = 0);
|
explicit MyGLWidget(QWidget *parent = 0);
|
||||||
@ -21,8 +23,17 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initializeGL();
|
void initializeGL();
|
||||||
|
void buildScene();
|
||||||
void resizeGL(int width, int height);
|
void resizeGL(int width, int height);
|
||||||
void paintGL();
|
void paintGL();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// handle events
|
||||||
|
void mouseMoveEvent(QMouseEvent *e);
|
||||||
|
void mousePressEvent(QMouseEvent* e);
|
||||||
|
void mouseReleaseEvent(QMouseEvent* e);
|
||||||
|
void keyPressEvent(QKeyEvent *e);
|
||||||
|
void keyReleaseEvent(QKeyEvent *e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MYGLWIDGET_H
|
#endif // MYGLWIDGET_H
|
||||||
|
@ -32,6 +32,6 @@ vec3 computeLight(in vec3 kd, in vec3 ks, in float ns, in vec3 color, in vec3 no
|
|||||||
void main(void) {
|
void main(void) {
|
||||||
vec3 kd = vec3(texture2D(baseTexture, varTexCoord));
|
vec3 kd = vec3(texture2D(baseTexture, varTexCoord));
|
||||||
|
|
||||||
outColor = vec4(kd, 1);
|
outColor = vec4(1, 0, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
24
scenecontroller.cpp
Normal file
24
scenecontroller.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "scenecontroller.h"
|
||||||
|
#include "scene.h"
|
||||||
|
#include "camera.h"
|
||||||
|
|
||||||
|
void SceneController::setScene(Scene* myScene)
|
||||||
|
{
|
||||||
|
scene = myScene;
|
||||||
|
camera = scene->getCamera();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SceneController::mouseMove(int dx, int dy)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SceneController::mouseEvent(int button, bool state)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SceneController::keyEvent(int key, bool state)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
20
scenecontroller.h
Normal file
20
scenecontroller.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef SCENECONTROLLER_H
|
||||||
|
#define SCENECONTROLLER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class Scene;
|
||||||
|
class Camera;
|
||||||
|
|
||||||
|
class SceneController
|
||||||
|
{
|
||||||
|
Camera* camera;
|
||||||
|
Scene* scene;
|
||||||
|
public:
|
||||||
|
void setScene(Scene* myScene);
|
||||||
|
void mouseMove(int dx, int dy);
|
||||||
|
void mouseEvent(int button, bool state);
|
||||||
|
void keyEvent(int key, bool state);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SCENECONTROLLER_H
|
@ -25,24 +25,24 @@ SOURCES += main.cpp\
|
|||||||
shader.cpp \
|
shader.cpp \
|
||||||
mesh.cpp \
|
mesh.cpp \
|
||||||
camera.cpp \
|
camera.cpp \
|
||||||
sparrowrenderer.cpp \
|
|
||||||
scene.cpp \
|
scene.cpp \
|
||||||
gridmesh.cpp \
|
gridmesh.cpp \
|
||||||
texture.cpp \
|
texture.cpp \
|
||||||
phongmaterial.cpp
|
phongmaterial.cpp \
|
||||||
|
scenecontroller.cpp
|
||||||
|
|
||||||
HEADERS += mainwindow.h \
|
HEADERS += mainwindow.h \
|
||||||
myglwidget.h \
|
myglwidget.h \
|
||||||
shader.h \
|
shader.h \
|
||||||
mesh.h \
|
mesh.h \
|
||||||
camera.h \
|
camera.h \
|
||||||
sparrowrenderer.h \
|
|
||||||
glassert.h \
|
glassert.h \
|
||||||
scene.h \
|
scene.h \
|
||||||
material.h \
|
material.h \
|
||||||
gridmesh.h \
|
gridmesh.h \
|
||||||
texture.h \
|
texture.h \
|
||||||
phongmaterial.h
|
phongmaterial.h \
|
||||||
|
scenecontroller.h
|
||||||
|
|
||||||
FORMS += mainwindow.ui
|
FORMS += mainwindow.ui
|
||||||
|
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
#include "sparrowrenderer.h"
|
|
||||||
#include "phongmaterial.h"
|
|
||||||
#include "shader.h"
|
|
||||||
#include "camera.h"
|
|
||||||
#include "scene.h"
|
|
||||||
#include "gridmesh.h"
|
|
||||||
#include "glassert.h"
|
|
||||||
#include <glew/glew.h>
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
SparrowRenderer::SparrowRenderer(int width, int height)
|
|
||||||
{
|
|
||||||
scene = new Scene();
|
|
||||||
scene->setCamera(new Camera(width, height));
|
|
||||||
Mesh* myGrid = new GridMesh(2, 2, false);
|
|
||||||
myGrid->initGL();
|
|
||||||
Shader* shader = new Shader(QString("../phong.vert"), QString("../phong.frag"));
|
|
||||||
Material* mat = new PhongMaterial(shader);
|
|
||||||
scene->addEntity(myGrid, mat);
|
|
||||||
}
|
|
||||||
|
|
||||||
SparrowRenderer::~SparrowRenderer()
|
|
||||||
{
|
|
||||||
delete(scene->getCamera());
|
|
||||||
delete(scene);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SparrowRenderer::resize(int width, int height)
|
|
||||||
{
|
|
||||||
scene->getCamera()->resize(width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SparrowRenderer::render()
|
|
||||||
{
|
|
||||||
// draw geometry
|
|
||||||
scene->drawEntities();
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
#ifndef SPARROWRENDERER_H
|
|
||||||
#define SPARROWRENDERER_H
|
|
||||||
|
|
||||||
class Camera;
|
|
||||||
class Shader;
|
|
||||||
class Scene;
|
|
||||||
|
|
||||||
class SparrowRenderer
|
|
||||||
{
|
|
||||||
Scene* scene;
|
|
||||||
public:
|
|
||||||
SparrowRenderer(int width, int height);
|
|
||||||
~SparrowRenderer();
|
|
||||||
|
|
||||||
void resize(int width, int height);
|
|
||||||
|
|
||||||
// Sparrow renderer's rendering pipeline
|
|
||||||
void render();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SPARROWRENDERER_H
|
|
Loading…
x
Reference in New Issue
Block a user