-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
128 lines (100 loc) · 4.19 KB
/
Copy pathmain.cpp
File metadata and controls
128 lines (100 loc) · 4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include "objects/CModel.h"
#include "gl/Shader.h"
#include "objects/CScene.h"
#include "camera/Camera.h"
#include "objects/CLight.h"
#include "renderdoc/renderdoc_app.h"
#include <minwindef.h>
#include <libloaderapi.h>
#include <gl/RenderStrategy.h>
#include <gl/DeferredRendering.h>
#include <map>
using namespace std;
int WIDTH =1240;
int HEIGHT = 960;
// 声明函数
void initShaderPathes(std::map<std::string,std::string>& ShaderPaths);
void initModelPathes(std::vector<std::string>& modelPaths);
void initScene(std::vector<std::string>& modelPaths, std::map<std::string,std::string>& ShaderPaths,CScene& scene, CCamera& camera, CLight& light, ShadowSetting& shadowSetting, CImage& cubemap, bool initShadow = true, bool initCubemap = true);
int main() {
IBLRenderStrategy renderStrategy(WIDTH,HEIGHT);
if(renderStrategy.initOpenGl()==-1)
{
return -1;
}
GLFWwindow *window = renderStrategy.Window;
//声明场景
std::map<std::string,std::string> ShaderPaths;
std::vector<std::string> modelPaths;
CScene scene;
CCamera camera;
CLight light;
ShadowSetting shadowSetting;
CImage cubemap;
//scene初始化
initScene(modelPaths, ShaderPaths,scene, camera, light, shadowSetting, cubemap, true, true);
glm::mat4 scaleMatrix = glm::scale(glm::mat4(1.0f), glm::vec3(1.0f));
//配置渲染策略
renderStrategy.initRenderStrategy(&scene,&camera,light,modelPaths,scaleMatrix,shadowSetting,cubemap,ShaderPaths);
//渲染循环
renderStrategy.Draw(window,&camera,ShaderPaths);
glfwTerminate();
return 0;
}
void initScene(std::vector<std::string>& modelPaths, std::map<std::string,std::string>& ShaderPaths,CScene& scene, CCamera& camera, CLight& light, ShadowSetting& shadowSetting, CImage& cubemap, bool initShadow , bool initCubemap ) {
// 初始化模型路径
initModelPathes(modelPaths);
// 初始化shader路径
initShaderPathes(ShaderPaths);
// 初始化场景
scene = CScene(WIDTH, HEIGHT);
// 初始化相机
glm::vec3 camera_Pos(0.0f, 10.0f, 30.0f);
glm::vec3 camera_UpVector(0.0, 1.0, 0.0);
glm::vec3 camera_cameraTarget(0.0f, 0.0f, 0.0);
camera = CCamera(camera_Pos, camera_UpVector, camera_cameraTarget);
// 初始化光源
glm::vec3 light_Dir(0.0f, 0.7f, -1.0f);
glm::vec3 light_Color(1.0f, 1.0f, 1.0f);
float light_instansity = 1.0f;
light = CLight(light_Dir, light_instansity, light_Color);
// 初始化阴影设置
if (initShadow) {
shadowSetting.setShadowMapSize(ShadowSetting::SHADOWMAPSIZE_1024);
}
// Cubemap初始化
if (initCubemap) {
cubemap.load_HdrImage("assets/HDR/hdir/autoshop_01_4k.hdr");
}
}
void initShaderPathes(std::map<std::string,std::string>& ShaderPaths){
ShaderPaths["cubemaprenderShader"] = "src/shaders/cubemaprendershaders/";
ShaderPaths["irradianceShader"] = "src/shaders/irradiancemap/";
ShaderPaths["prefilterShader"] = "src/shaders/prefiltermap/";
ShaderPaths["brdfShader"] = "src/shaders/BRDFLUT/";
ShaderPaths["Iblshader"] = "src/shaders/Iblshaders/";
ShaderPaths["depthShader"] = "src/shaders/shadowmapshaders/";
ShaderPaths["screenShader"] = "src/shaders/screenShaders/";
ShaderPaths["cubemapShader"] = "src/shaders/cubemapshaders/";
ShaderPaths["gbuffershader"] = "src/shaders/gbuffershaders/";
ShaderPaths["lightingPassShader"] = "src/shaders/lightingPassShaders/";
ShaderPaths["SSAOshader"] = "src/shaders/SSAOshaders/";
ShaderPaths["ssaoBufferBlurshader"] ="src/shaders/ssaoBufferBlur/";
}
void initModelPathes(std::vector<std::string>& modelPaths){
std::string mary = "assets/mary/Marry.obj";
std::string plane = "assets/plane/plane.obj";
std::string gun = "assets/ganyu.fbx";
std::string Ensk_Station = "assets/Ensk_station_fbx/Ensk_station.fbx";
std::string car ="assets/Batmobile/batmobile.fbx";
std::string rock ="assets/rockgr-21/Rock_group_21.fbx";
//modelPaths.push_back(mary);
//modelPaths.push_back(plane);
//modelPaths.push_back(gun);
modelPaths.push_back(Ensk_Station);
//modelPaths.push_back(car);
//modelPaths.push_back(rock);
}