1 #include "app/assets.hpp"
2 #include "app/config.hpp"
3 #include "app/init.hpp"
4 #include "graphics/camera.hpp"
5 #include "graphics/shader.hpp"
6 #include "graphics/viewport.hpp"
7 #include "graphics/window.hpp"
8 #include "rand/SimplexNoise.hpp"
9 #include "world/Floor.hpp"
13 #include <glm/glm.hpp>
14 #include <glm/gtc/matrix_transform.hpp>
16 using namespace tacos;
18 int main(int argc, char *argv[]) {
20 config.ReadArgs(argc, argv);
23 AssetLoader asset_loader(config);
24 Window window(1440, 900);
25 Viewport viewport(1440, 900);
27 constexpr float noise_scale = 1.0f/64.0f;
28 constexpr float height_scale = 5.0f;
31 Shader floor_vert(asset_loader.LoadVertexShader("floor"));
32 Shader floor_frag(asset_loader.LoadFragmentShader("floor"));
33 Program floor_program;
34 floor_program.Attach(floor_vert);
35 floor_program.Attach(floor_frag);
37 GLint mv_location = floor_program.UniformLocation("MV");
38 GLint mvp_location = floor_program.UniformLocation("MVP");
41 SimplexNoise noise(0);
42 for (int z = 0; z < floor.Depth(); ++z) {
43 for (int x = 0; x < floor.Width(); ++x) {
44 floor.SetElevation(x, z, noise(glm::vec3(x * noise_scale, 0.0f, z * noise_scale)) * height_scale);
47 floor.GenerateVertices();
49 glm::vec3 focus(20.0f, 0.0f, 20.0f);
62 while (SDL_PollEvent(&event)) {
68 if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
69 viewport.Resize(event.window.data1, event.window.data2);
77 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
78 for (int z = 0; z < floor.VAODepth(); ++z) {
79 for (int x = 0; x < floor.VAOWidth(); ++x) {
80 M = glm::translate(glm::mat4(1.0f), floor.VAOPosition(x, z));
81 MV = camera.View() * M;
82 MVP = viewport.Perspective() * MV;
83 floor_program.Uniform(mv_location, MV);
84 floor_program.Uniform(mvp_location, MVP);