diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 4ec6d4a..e6c0ddc 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -199,7 +199,7 @@ Renderer::Renderer(Window& win) : win(win) { }; /* BSP loader */ - bsp = std::make_unique(phys_dev, dev, "assets/maps/hl1.bsp"); + bsp = std::make_unique(phys_dev, dev, "assets/maps/dmc.bsp"); bsp_shaders = { { dev, "assets/shaders/bin/bsp.vert.spv", vk::ShaderStageFlagBits::eVertex }, { dev, "assets/shaders/bin/bsp.frag.spv", vk::ShaderStageFlagBits::eFragment }, diff --git a/Scene/BSP.cpp b/Scene/BSP.cpp index d9da477..17c6510 100644 --- a/Scene/BSP.cpp +++ b/Scene/BSP.cpp @@ -10,6 +10,13 @@ #include +/* changes handedness by swapping z and y */ +template +static inline void change_swizzle(T& v) { + auto tmp = v.y; + v.y = v.z; + v.z = tmp; +} using namespace HLBSP; @@ -25,7 +32,8 @@ static inline void copy_data(void* file_data, std::vector& dst, Lump& lump) { std::memcpy(dst.data(), ((u8*)file_data) + lump.offset, lump.len); } -glm::vec2 calc_tex_coords(const glm::vec3& v, const TexInfo& t) { +static inline glm::vec2 calc_tex_coords(glm::vec3 v, const TexInfo& t) { + change_swizzle(v); return glm::vec2( t.shift_s + glm::dot(v, t.shift_s_dir), t.shift_t + glm::dot(v, t.shift_t_dir) @@ -140,14 +148,6 @@ bool BSP::determine_visibility(const Leaf& cam_leaf, const Leaf& leaf, const std return box_in_frustum(frustum, box_verts); } -/* changes handedness by swapping z and y */ -template -static inline void change_swizzle(T& v) { - auto tmp = v.y; - v.y = v.z; - v.z = tmp; -} - static std::vector> load_entities(const std::string& in) { /* TODO */ return { diff --git a/assets/maps/dmc.bsp b/assets/maps/dmc.bsp new file mode 100755 index 0000000..2b112db Binary files /dev/null and b/assets/maps/dmc.bsp differ diff --git a/assets/shaders/map/bsp.frag b/assets/shaders/map/bsp.frag index 13bd762..e0c0197 100644 --- a/assets/shaders/map/bsp.frag +++ b/assets/shaders/map/bsp.frag @@ -19,6 +19,16 @@ layout (set = 0, binding = 0) uniform Matrices { layout (set = 0, binding = 1) uniform sampler2D tex; +vec3 tex_map(vec2 coords) { + return vec3( + 1-abs(cos(normalize(texCoord.xxy))) +// 0.0, +// sin(texCoord.y) +// sin(texCoord.x/texCoord.y) + ); +} + void main() { - FragColor = (color + vec4(1.0)) / 2.0; + FragColor.xyz = tex_map(texCoord); + FragColor.w = 1.0; } \ No newline at end of file diff --git a/assets/shaders/map/bsp.vert b/assets/shaders/map/bsp.vert index 7009065..63d196c 100644 --- a/assets/shaders/map/bsp.vert +++ b/assets/shaders/map/bsp.vert @@ -30,6 +30,6 @@ void main() { gl_Position = proj * view * vec4(aPos, 1.0); - color = vec4(aTexCoord, 0.0, 1.0); + color = vec4(0.0); texCoord = aTexCoord; } \ No newline at end of file diff --git a/util/geo.hpp b/util/geo.hpp index 371b577..22a0c67 100644 --- a/util/geo.hpp +++ b/util/geo.hpp @@ -4,30 +4,12 @@ #include #include -static glm::vec4 extract_plane(const glm::mat4& mat, int col) { - float sign; - if (col < 0) { - sign = -1.0; - col = -col - 1; - } else { - sign = 1.0; - col -= 1; - } - return glm::column(mat, 3) + sign * glm::column(mat, col); -} /* extracts frustum from projection matrix */ static std::array frustum(const glm::mat4& mat) { /* Left, Right, Top, Bottom, Back, Front */ - std::array ret; /* { - extract_plane(mat, 1), - extract_plane(mat, -1), - extract_plane(mat, 2), - extract_plane(mat, -2), - extract_plane(mat, 3), - extract_plane(mat, -3), - };*/ + std::array ret; for (size_t i = 0; i < 3; i++) for (size_t j = 0; j < 4; j++)