diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-02-18 06:23:51 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-02-18 06:23:51 +0100 |
commit | e409d00af067860edb509df6ffc53c8a20b881ff (patch) | |
tree | 2f59603c64763fd1605aa7dc774e7e5ac07d2418 | |
parent | 7ca344ebfd605caf664158152ae552fe5c520ca4 (diff) |
add old cruft for reference
-rw-r--r-- | old/main.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/old/main.cpp b/old/main.cpp new file mode 100644 index 00000000..2da2a2a1 --- /dev/null +++ b/old/main.cpp @@ -0,0 +1,115 @@ +#include "logging.hpp" +#include <glm/ext/matrix_transform.hpp> +#include <glm/ext/matrix_clip_space.hpp> +#include <SFML/Graphics.hpp> + +#if 0 +static const float isometric_matrix [16] = { +#if 1 + 0.766044, -0.633022, 0.111619, 0.000000, + 0.642788, 0.754407, -0.133022, 0.000000, + 0.000000, 0.173648, 0.984808, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000, +#else + 0.61237f, -0.50000f, 0.61237f, 0.0f, + 0.35355f, 0.86603f, 0.35355f, 0.0f, + 0.61237f, -0.50000f, 0.61237f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f +#endif +}; +#endif + +static constexpr glm::mat4 transform4_yz { + 1, 0, 0, 0, + 0, 0, 1, 0, + 0, 1, 0, 0, + 0, 0, 0, 1, +}; + +static constexpr glm::mat4 identity_transform4{1}; + +static auto make_projection(sf::Vector2f offset, const glm::mat4& transform = identity_transform4) +{ + auto [x, y] = offset; + auto m = glm::mat4{1}; + m = glm::translate(m, { x, -y, 0 }); + m = glm::scale(m, { 1.f, 0.6f, 1.f }); + m = glm::rotate(m, glm::radians(-45.f), glm::vec3(1.0f, 0.0f, 0.0f)); + m = glm::rotate(m, glm::radians(0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); + m = glm::rotate(m, glm::radians(-45.0f), glm::vec3(0.0f, 0.0f, 1.0f)); + m *= transform; + return m; +} + +static const std::string transform_str{"transform"}; + +int main() +{ + // create the window + sf::RenderWindow window(sf::VideoMode(800, 800), "My window"); + sf::Texture tex; + if (!tex.loadFromFile("images/wildtextures_cracked-asphalt-seamless-texture.jpg")) + return 1; + + sf::Sprite sprite{tex, { { 0, 0 }, { 100, 100 } }}; + sprite.setPosition({0, 0}); + + sf::Shader shader; + if (!shader.loadFromFile("shaders/tile.vert", "shaders/tile.frag")) + return 1; + + int offx = 0, offy = 0; + + // run the program as long as the window is open + while (window.isOpen()) + { + // check all the window's events that were triggered since the last iteration of the loop + sf::Event event = {}; + + while (window.pollEvent(event)) + { + // "close requested" event: we close the window + if (event.type == sf::Event::Closed) + window.close(); + else if (event.type == sf::Event::KeyPressed) + { + constexpr int off = 10; + switch (event.key.code) + { + default: break; + case sf::Keyboard::Escape: window.close(); break; + case sf::Keyboard::Left: offx += -off; break; + case sf::Keyboard::Right: offx += +off; break; + case sf::Keyboard::Up: offy += -off; break; + case sf::Keyboard::Down: offy += +off; break; + } + } + else if (event.type == sf::Event::Resized) + { + auto view = window.getView(); + view.setSize(window.getSize().x, window.getSize().y); + } + } + + // clear the window with black color + window.clear(sf::Color::Black); + + { + auto [w, h] = window.getView().getSize(); + sf::Vector2f camera_offset { offx / (float)w, offy / (float)h }; + //shader.setUniform(transform_str, make_projection(camera_offset)); + //window.draw(sprite, &shader); + auto rect = sprite.getLocalBounds(); + sf::Vector2f pos{-(rect.width - rect.left - offx) / w, + (rect.height - rect.top + offy)*.5f / h}; + auto mv = make_projection(pos/*, transform4_yz*/); + shader.setUniform(transform_str, sf::Glsl::Mat4{&mv[0][0]}); + window.draw(sprite, &shader); + } + + // end the current frame + window.display(); + } + + return 0; +} |