mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-18 07:58:11 +08:00
[UI][ADD] Model thumbnail widget
This commit is contained in:
parent
5ff60b1e86
commit
d818ccd469
75
FinalProject/modelthumbnailwidget.cpp
Normal file
75
FinalProject/modelthumbnailwidget.cpp
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#include <qfile.h>
|
||||||
|
#include <qdir.h>
|
||||||
|
|
||||||
|
#include "modelthumbnailwidget.h"
|
||||||
|
|
||||||
|
ModelThumbnailWidget::ModelThumbnailWidget(Model* model, QWidget* parent) :
|
||||||
|
QOpenGLWidget(parent), _model(model)
|
||||||
|
{
|
||||||
|
// OpenGL initialize
|
||||||
|
QSurfaceFormat format;
|
||||||
|
format.setProfile(QSurfaceFormat::CoreProfile);
|
||||||
|
format.setVersion(4, 3);
|
||||||
|
setFormat(format);
|
||||||
|
|
||||||
|
// Create a folder
|
||||||
|
QDir dir("./temp/shaders");
|
||||||
|
if (!dir.exists()) {
|
||||||
|
dir.mkpath(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the shaders to the folder
|
||||||
|
if (QFile::exists("./temp/shaders/vertexshader.vs")) {
|
||||||
|
QFile::remove("./temp/shaders/vertexshader.vs");
|
||||||
|
}
|
||||||
|
QFile::copy(":/shaders/vertexshader.vs", "./temp/shaders/vertexshader.vs");
|
||||||
|
QFile::setPermissions("./temp/shaders/vertexshader.vs", QFileDevice::ReadOwner | QFileDevice::WriteOwner);
|
||||||
|
if (QFile::exists("./temp/shaders/fragmentshader.fs")) {
|
||||||
|
QFile::remove("./temp/shaders/fragmentshader.fs");
|
||||||
|
}
|
||||||
|
QFile::copy(":/shaders/fragmentshader.fs", "./temp/shaders/fragmentshader.fs");
|
||||||
|
QFile::setPermissions("./temp/shaders/fragmentshader.fs", QFile::ReadOwner | QFile::WriteOwner);
|
||||||
|
}
|
||||||
|
|
||||||
|
ModelThumbnailWidget::~ModelThumbnailWidget() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModelThumbnailWidget::initializeGL() {
|
||||||
|
initializeOpenGLFunctions();
|
||||||
|
|
||||||
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
_shaderProgram.ensureInitialized();
|
||||||
|
|
||||||
|
VertexShader vertexShader("./temp/shaders/vertexshader.vs");
|
||||||
|
FragmentShader fragmentShader("./temp/shaders/fragmentshader.fs");
|
||||||
|
_shaderProgram.attachShader(vertexShader);
|
||||||
|
_shaderProgram.attachShader(fragmentShader);
|
||||||
|
vertexShader.dispose();
|
||||||
|
fragmentShader.dispose();
|
||||||
|
|
||||||
|
_object.setModel(_model->copyToCurrentContext());
|
||||||
|
_camera.setPosition(glm::vec3(0.0f, 0.0f, 7.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModelThumbnailWidget::paintGL() {
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
_shaderProgram.bind();
|
||||||
|
|
||||||
|
glm::mat4 view = _camera.viewMatrix();
|
||||||
|
glm::mat4 projection = glm::perspective(glm::radians(_camera.zoomVal()), (float)width() / (float)height(), 0.1f, 100.0f);
|
||||||
|
_shaderProgram.setUniform("view", view);
|
||||||
|
_shaderProgram.setUniform("projection", projection);
|
||||||
|
|
||||||
|
_object.render(_shaderProgram);
|
||||||
|
|
||||||
|
_shaderProgram.unbind();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModelThumbnailWidget::resizeGL(int w, int h) {
|
||||||
|
glViewport(0, 0, w, h);
|
||||||
|
}
|
||||||
30
FinalProject/modelthumbnailwidget.h
Normal file
30
FinalProject/modelthumbnailwidget.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QtOpenGLWidgets/qopenglwidget.h>
|
||||||
|
#include <qopenglfunctions.h>
|
||||||
|
#include <qevent.h>
|
||||||
|
|
||||||
|
#include "model.h"
|
||||||
|
#include "camera.h"
|
||||||
|
#include "shader.h"
|
||||||
|
#include "renderable.h"
|
||||||
|
|
||||||
|
class ModelThumbnailWidget : public QOpenGLWidget, protected QOpenGLFunctions
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
ModelThumbnailWidget(Model* model, QWidget* parent = 0);
|
||||||
|
~ModelThumbnailWidget();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Model* _model = nullptr;
|
||||||
|
Renderable _object = Renderable::empty();
|
||||||
|
ShaderProgram _shaderProgram = ShaderProgram::empty();
|
||||||
|
Camera _camera;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void initializeGL() override;
|
||||||
|
virtual void paintGL() override;
|
||||||
|
virtual void resizeGL(int w, int h) override;
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user