From: Elias Fleckenstein Date: Tue, 11 Aug 2020 13:26:08 +0000 (+0200) Subject: Improved Yaw & Pitch X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=faac262f0a50a517966c5504d7ea21dd9cbc5e21;p=dragonblocks3d-lua.git Improved Yaw & Pitch --- diff --git a/modules/Client/src/graphics.lua b/modules/Client/src/graphics.lua index f4adc2a..338be6e 100644 --- a/modules/Client/src/graphics.lua +++ b/modules/Client/src/graphics.lua @@ -5,7 +5,8 @@ function graphics:init() RenderEngine.bininear_filter = false RenderEngine.mipmap = false - RenderEngine.mouse_sensitivity = 0.012 + RenderEngine.mouse_sensitivity = 0.7 + --RenderEngine.pitch_move = true RenderEngine.mesh_effect_grow_time = 0.25 RenderEngine.mesh_effect_flyin_time = 1 RenderEngine.mesh_effect_flyin_offset = 20 diff --git a/modules/Client/src/init.lua b/modules/Client/src/init.lua index 728f6ec..ad7c81b 100644 --- a/modules/Client/src/init.lua +++ b/modules/Client/src/init.lua @@ -6,6 +6,6 @@ PlayerSystem:init("client") Client.map = WorldSystem.Map() Client.player = PlayerSystem.LocalPlayer() -Client.player:set_position(glm.vec3(8, 18, 40)) +Client.player:set_position(glm.vec3(8, 20, 8)) RenderEngine:render_loop() diff --git a/modules/PlayerSystem/src/localplayer.lua b/modules/PlayerSystem/src/localplayer.lua index 8734541..d2e46a8 100644 --- a/modules/PlayerSystem/src/localplayer.lua +++ b/modules/PlayerSystem/src/localplayer.lua @@ -4,8 +4,8 @@ table.assign(LocalPlayer, PlayerSystem.Player) function LocalPlayer:constructor() self:init() self:set_speed(10) - self:set_fov(45) - self:set_yaw(180) + self:set_fov(86.1) + self:set_yaw(-90) self:set_pitch(0) self:add_event_listener("after_set_position", function(event) self:set_position_callback(event) end) RenderEngine:add_event_listener("keypress", function(event) self:key_press_callback(event) end) @@ -21,28 +21,33 @@ end function LocalPlayer:key_press_callback(event) local keys = event.keys local speed = self.speed * event.dtime - local hvec, vvec = self.horizontal_look, RenderEngine.camera.up + local camera = RenderEngine.camera + local front, right, up = camera.front, camera.right, camera.up + if not RenderEngine.pitch_move then + front = glm.vec3(front.x, 0, front.z):normalize() + up = glm.vec3(0, up.y, 0):normalize() + end if keys["w"] then - self:move( speed * hvec) + self:move( speed * front) elseif keys["s"] then - self:move(-speed * hvec) + self:move(-speed * front) end - if keys["a"] then - self:move(-speed * (hvec % vvec):normalize()) - elseif keys["d"] then - self:move( speed * (hvec % vvec):normalize()) + if keys["d"] then + self:move( speed * right) + elseif keys["a"] then + self:move(-speed * right) end - if keys["left shift"] then - self:move(-speed * vvec) - elseif keys["space"] then - self:move( speed * vvec) + if keys["space"] then + self:move( speed * up) + elseif keys["left shift"] then + self:move(-speed * up) end end function LocalPlayer:mouse_move_callback(event) - self.yaw = self.yaw - event.x + self.yaw = self.yaw + event.x self.pitch = self.pitch - event.y - self:update_look() + self:update_camera() end function LocalPlayer:set_position_callback(event) @@ -59,18 +64,17 @@ function LocalPlayer:set_fov(fov) end function LocalPlayer:set_yaw(yaw) - self.yaw = math.rad(yaw) - self:update_look() + self.yaw = yaw + self:update_camera() end function LocalPlayer:set_pitch(pitch) - self.pitch = math.rad(pitch) - self:update_look() + self.pitch = pitch + self:update_camera() end -function LocalPlayer:update_look() - self.horizontal_look = glm.vec3(math.sin(self.yaw), 0, math.cos(self.yaw)):normalize() - RenderEngine.camera.front = glm.vec3(math.sin(self.yaw or 0), math.sin(self.pitch or 0), math.cos(self.yaw or 0)):normalize() +function LocalPlayer:update_camera() + RenderEngine.camera:update(self.yaw or 0, self.pitch or 0) end return LocalPlayer diff --git a/modules/RenderEngine/src/camera.lua b/modules/RenderEngine/src/camera.lua index c3236f7..012e3d9 100644 --- a/modules/RenderEngine/src/camera.lua +++ b/modules/RenderEngine/src/camera.lua @@ -1,11 +1,20 @@ local camera = { pos = glm.vec3(0, 0, 0), - front = glm.vec3(1, 0, 0), up = glm.vec3(0, 1, 0), + world_up = glm.vec3(0, 1, 0), + front = glm.vec3(0, 0, -1), } function camera:get_view_matrix() return glm.look_at(self.pos, self.pos + self.front, self.up) end +function camera:update(yaw, pitch) + yaw, pitch = math.rad(yaw), math.rad(glm.clamp(pitch, -89.0, 89.0)) + self.front = glm.vec3(math.cos(yaw)*math.cos(pitch), math.sin(pitch), math.sin(yaw)*math.cos(pitch)):normalize() + --self.front = glm.vec3(math.cos(yaw), math.sin(pitch), math.sin(yaw)):normalize() + self.right = (self.front % self.world_up):normalize() + self.up = (self.right % self.front):normalize() +end + return camera