100 lines
2.1 KiB
C++
100 lines
2.1 KiB
C++
#ifndef TERRAIN_H
|
|
#define TERRAIN_H
|
|
|
|
#include <QOpenGLFunctions_4_5_Core>
|
|
#include <QOpenGLShaderProgram>
|
|
#include <QVector3D>
|
|
#include <QMatrix4x4>
|
|
#include <QObject>
|
|
#include <QTime>
|
|
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
#include "skybox.h"
|
|
#include "shadowmap.h"
|
|
#include "config.h"
|
|
#include "block.h"
|
|
#include "camera.h"
|
|
#include "light.h"
|
|
#include "shader.h"
|
|
#include "simplequad.h"
|
|
|
|
QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram)
|
|
|
|
|
|
class Terrain: public QObject, protected QOpenGLFunctions_4_5_Core
|
|
{
|
|
Q_OBJECT
|
|
|
|
enum RenderedTexture {
|
|
Colors,
|
|
Normals,
|
|
Position,
|
|
MeshProperties,
|
|
Reflection,
|
|
Refraction,
|
|
WaterDepth,
|
|
Depth,
|
|
TextureCount
|
|
|
|
} RenderedTexture;
|
|
|
|
private:
|
|
int m_viewHeight;
|
|
int m_viewWidth;
|
|
|
|
bool m_showNormals;
|
|
bool m_skyAnimation;
|
|
|
|
QTime m_timeSinceStart;
|
|
int m_lastFrameTime;
|
|
|
|
QMatrix4x4 m_model;
|
|
static QMatrix4x4 m_reflection;
|
|
|
|
GLuint m_frameBuffers[2];
|
|
GLuint m_renderedTextures[Terrain::TextureCount];
|
|
|
|
Shader* m_landProgram;
|
|
Shader* m_waterProgram;
|
|
Shader* m_skyboxProgram;
|
|
Shader* m_normalProgram;
|
|
Shader* m_shadingProgram;
|
|
|
|
SkyBox m_skybox;
|
|
ShadowMap m_shadowMap;
|
|
Camera m_camera;
|
|
Light m_light;
|
|
SimpleQuad m_quad;
|
|
std::vector<std::shared_ptr<Block>> m_blocks;
|
|
|
|
void createHighmap();
|
|
void createMesh();
|
|
void createFrameBufferObject();
|
|
void deleteFrameBufferObject();
|
|
void createSimpleTextures(GLuint* texturesId, GLsizei nbTextures, GLsizei width, GLsizei height);
|
|
void createTerrain();
|
|
|
|
QOpenGLShaderProgram* getProgram(QString shaderName, bool useGeom);
|
|
void setAllUniformsForProgram(Shader* program, RenderPassType renderPass);
|
|
void defferedShadingPipeline(RenderPassType renderPass);
|
|
public:
|
|
Terrain();
|
|
~Terrain();
|
|
void initGl();
|
|
void render(GLuint defaultFrameBuffer);
|
|
void setUniforms(Shader* program, RenderPassType renderPass);
|
|
void setSkyAnimation(bool newState);
|
|
void setShowNormals(bool newState);
|
|
|
|
Light* light();
|
|
Camera* camera();
|
|
|
|
public slots:
|
|
void setViewPort(int width, int height);
|
|
|
|
};
|
|
|
|
#endif // TERRAIN_H
|