splitted into 2 projects, see sparrowEditor project

This commit is contained in:
Anselme 2015-07-09 13:15:27 +02:00
parent 1668101b46
commit 486b81d153
24 changed files with 24 additions and 4106 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +0,0 @@
#
# generated by kHED
#
newmtl steel
d 1.0
Ka 1.0 1.0 1.0
Ks 0.9 0.9 0.9
Kd 0.3 0.3 0.3
map_Kd res/textures/steel.jpg
newmtl leather
d 1.0
Ka 1.0 1.0 1.0
Ks 0.4 0.4 0.4
Kd 0.9 0.9 0.9
map_Kd res/textures/leather.jpg

File diff suppressed because it is too large Load Diff

7
framebuffer.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "framebuffer.h"
FrameBuffer::FrameBuffer()
{
}

11
framebuffer.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef FRAMEBUFFER_H
#define FRAMEBUFFER_H
class FrameBuffer
{
public:
FrameBuffer();
};
#endif // FRAMEBUFFER_H

View File

@ -1,11 +0,0 @@
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

View File

@ -1,67 +0,0 @@
#include "mainwindow.h"
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
#include "modulewidget.h"
#include "resourcewidget.h"
#include "myglwidget.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
setWindowTitle("SparrowRenderer");
resize(800, 600);
// modules widget
moduleWidget = new ModuleWidget(this);
addDockWidget(Qt::LeftDockWidgetArea, moduleWidget);
// resources widget
resourceWidget = new ResourceWidget(this);
addDockWidget(Qt::RightDockWidgetArea, resourceWidget);
// opengl widget
openGLWidget = new OpenGLWidget(this);
openGLWidget->setRenderer(moduleWidget);
setCentralWidget(openGLWidget);
// actions
actionExit = new QAction(this);
actionExit->setText("Exit");
actionShowModuleWidget = new QAction(this);
actionShowModuleWidget->setText("Modules");
actionShowModuleWidget->setEnabled(false);
// menubar
menuBar = new QMenuBar(this);
menuBar->setGeometry(QRect(0, 0, 800, 22));
menuMenu = new QMenu(menuBar);
menuMenu->setTitle("Main menu");
menuMenu->addAction(actionShowModuleWidget);
menuMenu->addAction(actionExit);
menuBar->addAction(menuMenu->menuAction());
menuBar->setNativeMenuBar(false);
setMenuBar(menuBar);
// connect signals to slots
QObject::connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
QObject::connect(moduleWidget, SIGNAL(visibilityChanged(bool)), actionShowModuleWidget, SLOT(setDisabled(bool)));
QObject::connect(actionShowModuleWidget, SIGNAL(triggered()), this, SLOT(reopenModuleWidget()));
QObject::connect(openGLWidget, SIGNAL(modulesChanged()), moduleWidget, SLOT(updateList()));
QObject::connect(openGLWidget, SIGNAL(modulesChanged()), resourceWidget, SLOT(updateList()));
QMetaObject::connectSlotsByName(this);
}
void MainWindow::reopenModuleWidget()
{
emit(moduleWidget->setVisible(true));
}

View File

@ -1,34 +0,0 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class OpenGLWidget;
class ModuleWidget;
class ResourceWidget;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private:
QAction *actionExit;
QAction *actionShowModuleWidget;
QMenuBar *menuBar;
QMenu *menuMenu;
OpenGLWidget *openGLWidget;
ModuleWidget *moduleWidget;
ResourceWidget *resourceWidget;
private slots:
void reopenModuleWidget();
};
#endif // MAINWINDOW_H

View File

@ -1,33 +0,0 @@
#include "modulewidget.h"
#include "ui_modulewidget.h"
ModuleWidget::ModuleWidget(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::ModuleWidget)
{
ui->setupUi(this);
}
ModuleWidget::~ModuleWidget()
{
delete ui;
}
void ModuleWidget::updateList()
{
QListWidget* list = ui->listWidget;
list->clear();
for(ModuleNode& m : modules)
list->addItem(new QListWidgetItem(QString(m.name.c_str())));
}
/*void ModuleWidget::moduleSetEnabled(QTreeWidgetItem* item, int button)
{
SparrowRenderer* renderer = ui->openGLWidget->getRenderer();
std::string name = item->text(0).toStdString();
if(renderer->isModuleEnabled(name))
renderer->disableModule(name);
else
renderer->enableModule(name);
ui->openGLWidget->updateGL();
}*/

View File

@ -1,26 +0,0 @@
#ifndef MODULEWIDGET_H
#define MODULEWIDGET_H
#include <QDockWidget>
#include "sparrowrenderer.h"
namespace Ui {
class ModuleWidget;
}
class ModuleWidget : public QDockWidget, public SparrowRenderer
{
Q_OBJECT
public:
explicit ModuleWidget(QWidget *parent = 0);
~ModuleWidget();
private:
Ui::ModuleWidget *ui;
public slots:
void updateList();
};
#endif // MODULEWIDGET_H

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ModuleWidget</class>
<widget class="QDockWidget" name="ModuleWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>141</width>
<height>392</height>
</rect>
</property>
<property name="allowedAreas">
<set>Qt::LeftDockWidgetArea</set>
</property>
<property name="windowTitle">
<string>Modules</string>
</property>
<widget class="QWidget" name="dockWidgetContents">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QListWidget" name="listWidget"/>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>157</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -1,150 +0,0 @@
#include <glew/glew.h>
#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 "resourcebase.h"
#include "utils.h"
#include "lights.h"
#include "texture.h"
#include "gridmesh.h"
#include "sparrowrenderer.h"
#include "focuscontroller.h"
#include <iostream>
#include <glm/glm.hpp>
#include <glm/ext.hpp>
#include <QKeyEvent>
#include <QMouseEvent>
OpenGLWidget::OpenGLWidget(QWidget *parent) :
QGLWidget(parent),
renderer(NULL),
controller(NULL)
{}
OpenGLWidget::~OpenGLWidget()
{
renderer->destroyGL();
if(controller != NULL)
delete(controller);
}
void OpenGLWidget::setRenderer(SparrowRenderer* myRenderer)
{
renderer = myRenderer;
}
void OpenGLWidget::loadResources()
{
std::string filenames[6] = {
"../data/skybox_ft", "../data/skybox_bk",
"../data/skybox_up", "../data/skybox_dn",
"../data/skybox_lf", "../data/skybox_rt"
};
ResourceBase::setTexture("skybox", new Texture(filenames));
ResourceBase::setTexture("textureNoise", new Texture("../data/noise.png"));
ResourceBase::setTexture("perlinNoise", new Texture());
ResourceBase::setMesh("grid", new GridMesh(10, 10, true));
ResourceBase::setMesh("sword", Utils::loadOBJ("../data/sword.obj"));
ResourceBase::setMesh("sphere", new Sphere(4));
std::string vertSource = Utils::fileToString("../phong.vert");
std::string fragSource = Utils::fileToString("../phong.frag");
ResourceBase::setShader("phong", new Shader(vertSource, fragSource));
}
void OpenGLWidget::buildScene()
{
// camera positionning
Camera* cam = renderer->getCamera();
cam->moveTo(glm::vec3(0, 0, 3));
cam->lookAt(glm::vec2(0, 0));
// create skybox module
SkyboxModule* skybox = new SkyboxModule(ResourceBase::getTexture("skybox"));
renderer->addModule(skybox, "skybox");
// create phong module
Lights* directionnalLights = new Lights();
Lights* pointLights = new Lights();
directionnalLights->addLight(glm::vec3(6, 4, -4), glm::vec3(0.7f, 0.6f, 0.4f)); // sun
PhongModule* myPhongModule = new PhongModule(directionnalLights, pointLights, ResourceBase::getShader("phong"));
renderer->addModule(myPhongModule, "phong");
// create a material
PhongMaterial* mat = new PhongMaterial(glm::vec3(1), glm::vec3(1), 20.0f);
mat->setTexture(ResourceBase::getTexture("textureNoise"));
ResourceBase::setMaterial("basicMat", mat);
// create an entity
Mesh* myMesh = ResourceBase::getMesh("sphere");
myMesh->initGL();
Entity* myEntity = new Entity(myMesh, ResourceBase::getMaterial("basicMat"));
glm::mat4* transform = myEntity->getTransform();
*transform = glm::rotate(*transform, 3.14f, glm::vec3(0, 1, 0));
myPhongModule->addEntity(myEntity);
emit modulesChanged();
}
void OpenGLWidget::initializeGL()
{
renderer->initGL(width(), height());
loadResources();
buildScene();
controller = new FocusController(new glm::vec3(0));
controller->setCamera(renderer->getCamera());
}
void OpenGLWidget::resizeGL(int width, int height)
{
renderer->resize(width, height);
updateGL();
}
void OpenGLWidget::paintGL()
{
renderer->render();
}
void OpenGLWidget::mouseMoveEvent(QMouseEvent *e)
{
controller->mouseMove(e->pos().x() - last.x(), e->pos().y() - last.y());
last = e->pos();
updateGL();
}
void OpenGLWidget::mousePressEvent(QMouseEvent* e)
{
controller->mouseEvent(e->button(), true);
last = e->pos();
updateGL();
}
void OpenGLWidget::mouseReleaseEvent(QMouseEvent* e)
{
controller->mouseEvent(e->button(), false);
updateGL();
}
void OpenGLWidget::wheelEvent(QWheelEvent *e)
{
controller->mouseWheelEvent(e->delta());
updateGL();
}
void OpenGLWidget::keyPressEvent(QKeyEvent *e)
{
controller->mouseEvent(e->key(), true);
updateGL();
}
void OpenGLWidget::keyReleaseEvent(QKeyEvent *e)
{
controller->mouseEvent(e->key(), false);
updateGL();
}

View File

@ -1,46 +0,0 @@
#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H
#include <QGLWidget>
class SparrowRenderer;
class SceneController;
namespace Ui {
class MyGLWidget;
}
class OpenGLWidget : public QGLWidget
{
Q_OBJECT
SparrowRenderer* renderer;
SceneController* controller;
QPoint last;
public:
explicit OpenGLWidget(QWidget *parent = 0);
~OpenGLWidget();
void setRenderer(SparrowRenderer* myRenderer);
protected:
void initializeGL();
void loadResources();
void buildScene();
void resizeGL(int width, int height);
void paintGL();
private:
// handle events
void mouseMoveEvent(QMouseEvent *e);
void mousePressEvent(QMouseEvent* e);
void mouseReleaseEvent(QMouseEvent* e);
void wheelEvent(QWheelEvent *e);
void keyPressEvent(QKeyEvent *e);
void keyReleaseEvent(QKeyEvent *e);
signals:
void modulesChanged();
};
#endif // MYGLWIDGET_H

View File

@ -1,76 +0,0 @@
#include "resourcewidget.h"
#include "ui_resourcewidget.h"
#include <iostream>
ResourceWidget::ResourceWidget(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::ResourceWidget)
{
ui->setupUi(this);
ui->treeWidget->resresizeColumnToContents(0);
ui->treeWidget->header()->setStretchLastSection(false);
}
ResourceWidget::~ResourceWidget()
{
delete ui;
}
void ResourceWidget::updateList()
{
QTreeWidget* tree = ui->treeWidget;
for(QTreeWidgetItemIterator it(tree); *it; ++it)
{
QTreeWidgetItem* item = *it;
if(item->parent())
continue;
item->setBackgroundColor(0, QColor(180, 220, 255));
item->setExpanded(true);
QString text = item->text(0);
if (text == "Textures")
{
for(std::string &name : textures.names)
{
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
myItem->setText(0, QString(name.c_str()));
tree->addTopLevelItem(myItem);
}
}
else if(text == "Meshes")
{
for(std::string &name : meshes.names)
{
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
myItem->setText(0, QString(name.c_str()));
tree->addTopLevelItem(myItem);
}
}
else if(text == "Materials")
{
for(std::string &name : materials.names)
{
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
myItem->setText(0, QString(name.c_str()));
tree->addTopLevelItem(myItem);
}
}
else if(text == "Shaders")
{
for(std::string &name : shaders.names)
{
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
myItem->setText(0, QString(name.c_str()));
tree->addTopLevelItem(myItem);
}
}
else if(text == "Entities")
{
for(std::string &name : entities.names)
{
QTreeWidgetItem* myItem = new QTreeWidgetItem(item);
myItem->setText(0, QString(name.c_str()));
tree->addTopLevelItem(myItem);
}
}
}
}

View File

@ -1,26 +0,0 @@
#ifndef RESOURCEWIDGET_H
#define RESOURCEWIDGET_H
#include <QDockWidget>
#include "resourcebase.h"
namespace Ui {
class ResourceWidget;
}
class ResourceWidget : public QDockWidget, public ResourceBase
{
Q_OBJECT
public:
explicit ResourceWidget(QWidget *parent = 0);
~ResourceWidget();
private:
Ui::ResourceWidget *ui;
public slots:
void updateList();
};
#endif // RESOURCEWIDGET_H

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ResourceWidget</class>
<widget class="QDockWidget" name="ResourceWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>171</width>
<height>411</height>
</rect>
</property>
<property name="allowedAreas">
<set>Qt::RightDockWidgetArea</set>
</property>
<property name="windowTitle">
<string>Resources</string>
</property>
<widget class="QWidget" name="dockWidgetContents">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTreeWidget" name="treeWidget">
<property name="alternatingRowColors">
<bool>false</bool>
</property>
<property name="autoExpandDelay">
<number>-1</number>
</property>
<property name="indentation">
<number>20</number>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<attribute name="headerStretchLastSection">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>name</string>
</property>
</column>
<item>
<property name="text">
<string>Textures</string>
</property>
</item>
<item>
<property name="text">
<string>Meshes</string>
</property>
</item>
<item>
<property name="text">
<string>Materials</string>
</property>
</item>
<item>
<property name="text">
<string>Shaders</string>
</property>
</item>
<item>
<property name="text">
<string>Entities</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -4,10 +4,10 @@
# #
#------------------------------------------------- #-------------------------------------------------
QT += core gui opengl widgets QT += core
TARGET = sparrowRenderer TARGET = sparrowRenderer
TEMPLATE = app TEMPLATE = lib
CONFIG += c++11 CONFIG += c++11
INCLUDEPATH += ../cpp_dependencies/include INCLUDEPATH += ../cpp_dependencies/include
@ -20,11 +20,7 @@ unix {
LIBS += -lGL -lGLEW -lGLU LIBS += -lGL -lGLEW -lGLU
} }
SOURCES += shader.cpp \
SOURCES += main.cpp\
mainwindow.cpp \
myglwidget.cpp \
shader.cpp \
mesh.cpp \ mesh.cpp \
camera.cpp \ camera.cpp \
gridmesh.cpp \ gridmesh.cpp \
@ -41,12 +37,9 @@ SOURCES += main.cpp\
phongmodule.cpp \ phongmodule.cpp \
skyboxmodule.cpp \ skyboxmodule.cpp \
basicmodule.cpp \ basicmodule.cpp \
resourcewidget.cpp \ framebuffer.cpp
modulewidget.cpp
HEADERS += mainwindow.h \ HEADERS += shader.h \
myglwidget.h \
shader.h \
mesh.h \ mesh.h \
camera.h \ camera.h \
glassert.h \ glassert.h \
@ -67,12 +60,7 @@ HEADERS += mainwindow.h \
basicmodule.h \ basicmodule.h \
module.h \ module.h \
resource.h \ resource.h \
resourcewidget.h \ framebuffer.h
modulewidget.h
FORMS += \
resourcewidget.ui \
modulewidget.ui
OTHER_FILES += *.frag *.vert *.glsl *.todo OTHER_FILES += *.frag *.vert *.glsl *.todo