X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld.cpp;h=7f30d71efc1930d9658c5b2633038499c6c62e7b;hb=4a21e9e32525fe23915db97f3439cae780994118;hp=d115378f10b6926e771e65eb9fad34d6ccdb44e1;hpb=804bde3fc09e4317eef629861638a68bfad3e343;p=blank.git diff --git a/src/world.cpp b/src/world.cpp index d115378..7f30d71 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -13,6 +13,7 @@ World::World() , slabShape({{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.0f, 0.5f }}) , blockNoise(0) , colorNoise(1) +, player() , loaded() , to_generate() { blockType.Add(BlockType{ true, { 1.0f, 1.0f, 1.0f }, &blockShape }); // white block @@ -101,7 +102,7 @@ bool World::Intersection( int cur_blkid; float cur_dist; glm::vec3 cur_normal; - if (cur_chunk.Intersection(ray, M * cur_chunk.Transform(), &cur_blkid, &cur_dist, &cur_normal)) { + if (cur_chunk.Intersection(ray, M * cur_chunk.Transform(player.ChunkCoords()), &cur_blkid, &cur_dist, &cur_normal)) { if (cur_dist < closest_dist) { closest_chunk = &cur_chunk; closest_blkid = cur_blkid; @@ -159,11 +160,15 @@ void World::Update(int dt) { void World::Render(DirectionalLighting &program) { program.SetLightDirection({ -1.0f, -3.0f, -2.0f }); - program.SetView(glm::inverse(player.Transform())); + program.SetView(glm::inverse(player.Transform(player.ChunkCoords()))); for (Chunk &chunk : LoadedChunks()) { - program.SetM(chunk.Transform()); - chunk.Draw(); + glm::mat4 m(chunk.Transform(player.ChunkCoords())); + program.SetM(m); + glm::mat4 mvp(program.GetVP() * m); + if (!CullTest(Chunk::Bounds(), mvp)) { + chunk.Draw(); + } } }