diff options
Diffstat (limited to 'main.lua')
-rw-r--r-- | main.lua | 88 |
1 files changed, 16 insertions, 72 deletions
@@ -1,6 +1,5 @@ require 'honey.std' - local glfw = honey.glfw local gl = honey.gl local Vec3 = honey.Vec3 @@ -9,86 +8,41 @@ local ecs = honey.ecs local systems = honey.standardSystems --- camera matrices +-- initialize honey +local window = honey.init() + +-- create camera matrices local camera = { view=Mat4():identity():translate(Vec3{0, 0, -60}), projection=Mat4():perspective(math.rad(45), 640/480, 0.1, 100), } - - +-- setup ecs local level = ecs.Level() level:addSystem(systems.transformCascade) level:addSystem(systems.renderCam(camera)) level:addSystem(systems.update) - - -local window = honey.init() -gl.Enable(gl.DEPTH_TEST) - - - -local vertexShaderSource = [[ -#version 410 core -layout (location = 0) in vec3 in_position; -layout (location = 1) in vec3 in_normal; -layout (location = 2) in vec2 in_tex; - -uniform mat4 model; -uniform mat4 view; -uniform mat4 projection; - -out vec3 position; -out vec3 normal; -out vec2 tex; - -void main() -{ - gl_Position = projection * view * model * vec4(in_position, 1.0); - position = in_position; - //normal = vec3(model * vec4(in_normal, 1.0f)); - normal = in_normal; - tex = in_tex; -} -]] - -local fragmentShaderSource = [[ -#version 410 core -out vec4 FragColor; - -in vec3 position; -in vec3 normal; -in vec2 tex; - -uniform sampler2D ourTexture; - -void main() -{ - FragColor = vec4(normal, 1.0f); - //FragColor = vec4(tex, 1.0f, 1.0f); - //FragColor = texture(ourTexture, TexCoord); -} -]] - +-- create shader local shader = honey.Shader{ - vertex = vertexShaderSource, - fragment = fragmentShaderSource, + vertexFile = "vertex.glsl", + fragmentFile = "fragment.glsl", } +-- load models local tetra = honey.mesh.loadFile("assets/tetrahedron.obj")[1] local cube = honey.mesh.loadFile("assets/cube.obj")[1] local octa = honey.mesh.loadFile("assets/octahedron.obj")[1] local dodeca = honey.mesh.loadFile("assets/dodecahedron.obj")[1] local icosa = honey.mesh.loadFile("assets/icosahedron.obj")[1] - +-- update function for each entity function updateTransform(self, dt) self.transform:rotateY(0.3 * math.pi * dt) self.transform:rotateX(0.1 * math.pi * dt) end - +-- create entities function growLine(prev, depth) if depth == 0 then return prev end @@ -104,7 +58,6 @@ function growLine(prev, depth) return growLine(entity, depth-1) end - local leaf = { transform=Mat4():identity():translate(Vec3{2, 0, 0}), parent=false, @@ -114,28 +67,19 @@ local leaf = { local root = growLine(leaf, 24) level:addEntity(root) - +-- close window on ESCAPE key window:setKeyCallback(function(_, key) if key == glfw.KEY_ESCAPE then window:setShouldClose(true) end end) - - -local prevTime = 0 -while not window:shouldClose() do - local time = glfw.GetTime() - local dt = time - prevTime - prevTime = time - +-- main loop +honey.loop(window, function(dt) gl.ClearColor(0.2, 0.4, 1.0, 1.0) gl.Clear(gl.COLOR_BUFFER_BIT + gl.DEPTH_BUFFER_BIT) - level:update(dt) +end) - window:swapBuffers() - glfw.PollEvents() -end - +-- clean up honey.terminate() |