-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
107 lines (91 loc) · 4.2 KB
/
main.cpp
File metadata and controls
107 lines (91 loc) · 4.2 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
#include <iostream>
#define GLFW_INCLUDE_NONE
#include <glm/glm.hpp>
#include <LibFacade.hpp>
#include <Shaders/ShaderProcessor.hpp>
#include <Window.h>
#include <Camera.h>
#include <loader.hpp>
#include <Events/EventHandler.hpp>
#include "Buffers/ShaderStorageBuffer.hpp"
#include "Properties/BasicSceneObject.h"
#include "Scene/Scene.h"
#include "Shaders/ShaderBuilder.hpp"
#include "Utils/ObjParser.hpp"
using namespace glm;
int main() {
Window window(800, 600, "title", 70);
window.SetClearColor(0.4, 0.4, 0.4, 1);
window.Open();
InputHandler inputHandler = window.InitWindowInputHandler();
EventHandler eventHandler;
ShaderBuilder shaderBuilder;
ShaderProgram shader =
shaderBuilder
.AttachVertexShader(vertexShaderSource)
.AttachGeometryShader(geometryShaderSource)
.AttachFragmentShader(fragmentShaderSource)
.Build();
shader.UseProgram();
BasicSceneObject obj = bunGL::MakeDrawableFromObj(R"(C:\Users\kosti\CLionProjects\ServerOpenGLRenderer\assets\bnuuy.obj)" , 0);
BasicSceneObject obj2 = bunGL::MakeDrawableFromObj(R"(C:\Users\kosti\CLionProjects\ServerOpenGLRenderer\assets\Glaceon.obj)" , 0);
BasicSceneObject obj3 = bunGL::MakeDrawableFromObj(R"(C:\Users\kosti\CLionProjects\ServerOpenGLRenderer\assets\floor.obj)" , 0);
Camera camera;
obj2.Scale(0.01f);
camera.RegisterUniforms(&shader);
window.RegisterUniforms(&shader);
obj.RegisterUniforms(&shader);
obj2.RegisterUniforms(&shader);
obj3.RegisterUniforms(&shader);
Scene scene;
scene.AddRegistry(&eventHandler);
scene.AddRegistry(&camera);
scene.AddRegistry(&obj);
scene.AddRegistry(&obj2);
scene.AddRegistry(&obj3);
scene.RegisterUniforms(&shader);
LightData lightData{};
lightData.worldLightPos = vec3(-1.0, 1.0f, 0.2f);
lightData.color = vec4(0.2f, 0.8f, 0.4f, 1.0f);
lightData.kc = 0;
lightData.kl = 0.1;
lightData.kq = 0;
lightData.lightDirection = normalize(vec3(-0.7, -0.5f, 0.7));
lightData.lightDirection = glm::vec3(glm::rotate(glm::mat4(1), glm::radians(-45.0f), glm::vec3(0, 1, 0)) * glm::vec4(lightData.lightDirection, 1));
lightData.p = 10;
lightData.coneAngle = glm::radians(10.0f);
size_t lightIndex = scene.AddLight(lightData);
lightData.lightDirection.x = 0.2f;
lightData.worldLightPos = vec3(0, 0.1, 0.2f);
lightData.color = vec4(1,0,0,1);
scene.AddLight(lightData);
window.AddUpdatable(&inputHandler);
window.AddUpdatable(&shader);
window.AddUpdatable(&scene);
// camera.AttachMovable(&obj);
// camera.AttachRotatable(&obj);
eventHandler.AddEvent([&](){return inputHandler.isKeyPressed(GLFW_KEY_A);}, [&](){camera.Move(vec3(-1,0,0));});
eventHandler.AddEvent([&](){return inputHandler.isKeyPressed(GLFW_KEY_D);}, [&](){camera.Move(vec3(1,0,0));});
eventHandler.AddEvent([&](){return inputHandler.isKeyPressed(GLFW_KEY_W);}, [&](){camera.Move(vec3(0,0,-1));});
eventHandler.AddEvent([&](){return inputHandler.isKeyPressed(GLFW_KEY_S);}, [&](){camera.Move(vec3(0,0,1));});
eventHandler.AddEvent([&](){return inputHandler.isKeyPressed(GLFW_KEY_SPACE);}, [&](){camera.Move(vec3(0,1,0));});
eventHandler.AddEvent([&](){return inputHandler.isKeyPressed(GLFW_KEY_LEFT_SHIFT);}, [&](){camera.Move(vec3(0,-1,0));});
eventHandler.AddEvent([&](){return inputHandler.isMouseButtonJustPressed(GLFW_MOUSE_BUTTON_LEFT);}, [&](){window.SwitchCursorMode();});
eventHandler.AddEvent([&](){return !window.IsCursorVisible();}, [&]() {
if (const vec2 offset = inputHandler.getMouseOffset(); offset.x != 0 || offset.y != 0) {
camera.RotateX(-offset.y / 5.0f);
camera.RotateY(-offset.x / 5.0f);
}
});
eventHandler.AddEvent([&]() { return inputHandler.isWindowSizeChanged(); }, [&]() {
window.SetNewWindowSize(inputHandler.getWindowSize().x, inputHandler.getWindowSize().y);
});
eventHandler.AddEvent([&](){return true;}, [&]() {
// obj2.RotateY(1.0f);
// lightData.lightDirection = camera.GetDirection();
// lightData.worldLightPos = camera.GetPosition();
scene.UpdateLight(lightIndex, lightData);
});
window.Join();
return 0;
}