]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/RenderEngine/src/chunk_mesh.lua
4a1369d839b35eea364c483730d6a99ef3764ada
[dragonblocks3d-lua.git] / modules / RenderEngine / src / chunk_mesh.lua
1 local ChunkMesh = Dragonblocks.create_class()
2 table.assign(ChunkMesh, RenderEngine.Mesh)
3
4 function ChunkMesh:create_vertices(chunk)
5         self.vertices = {}
6         self.textures = {}
7         self.vertex_blob_size = 6
8         local face_orientations = {
9                 glm.vec3( 0,  0, -1),
10                 glm.vec3( 0,  0,  1),
11                 glm.vec3(-1,  0,  0),
12                 glm.vec3( 1,  0,  0),
13                 glm.vec3( 0, -1,  0),
14                 glm.vec3( 0,  1,  0),
15         }
16         for _, block in pairs(chunk.blocks) do
17                 for i, dir in ipairs(face_orientations) do
18                         local pos = block.pos
19                         if not chunk:get_block(pos + dir) then
20                                 table.insert(self.textures, block.def.texture)
21                                 self:add_face(block.pos, i)
22                         end
23                 end
24         end
25         self:apply_vertices(self.vertices)
26 end
27
28 function ChunkMesh:add_face(pos, facenr)
29         local cube_vertices = RenderEngine.cube_vertices
30         local pos_modifier = {pos.x, pos.y, pos.z}
31         local offset = (facenr - 1) * 6
32         for vertex_index = offset, offset + 5 do
33                 for attribute_index = 1, 5 do   
34                         local k = vertex_index * 5 + attribute_index
35                         local v = cube_vertices[k]
36                         if attribute_index <= 3 then
37                                 v = v + pos_modifier[attribute_index]
38                         end
39                         table.insert(self.vertices, v)
40                 end
41         end
42 end
43
44 return ChunkMesh