+ glEnableVertexAttribArray(0);\r
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (void*)(0));\r
+ glEnableVertexAttribArray(1);\r
+ glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (void*)(sizeof(float) * 3));\r
+\r
+ glBindVertexArray(0);\r
+ }\r
+ GLuint VAO = 0;\r
+};\r
+\r
+\r
+struct freecam {\r
+ glm::vec3 pos = glm::vec3(0, 0, -1);\r
+ glm::vec2 rot = glm::vec2(0, 0);\r
+\r
+ void update(sf::Window &window) {\r
+ int mouseDeltaX = sf::Mouse::getPosition(window).x - window.getSize().x / 2;\r
+ int mouseDeltaY = sf::Mouse::getPosition(window).y - window.getSize().y / 2;\r
+\r
+ rot.x += mouseDeltaX;\r
+ rot.y += mouseDeltaY;\r
+\r
+ forward = glm::rotate(glm::vec3(0, 0, 1), rot.y / angleFactor, glm::vec3(1, 0, 0));\r
+ forward = glm::rotate(forward, -rot.x / angleFactor, glm::vec3(0, 1, 0));\r
+\r
+ glm::vec3 left = glm::rotate(glm::vec3(0, 0, 1), -rot.x / angleFactor + glm::radians(90.0f), glm::vec3(0, 1, 0));\r
+\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::LShift))\r
+ moveFactor = 200;\r
+ else\r
+ moveFactor = 20;\r
+\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))\r
+ pos += forward / moveFactor;\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))\r
+ pos -= forward / moveFactor;\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))\r
+ pos += left / moveFactor;\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))\r
+ pos -= left / moveFactor;\r
+\r
+ limit();\r
+ }\r
+\r
+ void limit() {\r
+ rot.x = fmod(rot.x, glm::radians(360.0f) * angleFactor);\r
+ rot.y = fmod(rot.y, glm::radians(360.0f) * angleFactor);\r
+ }\r
+\r
+ glm::mat4 getViewMatrix() {\r
+ forward = glm::rotate(glm::vec3(0, 0, 1), rot.y / angleFactor, glm::vec3(1, 0, 0));\r
+ forward = glm::rotate(forward, -rot.x / angleFactor, glm::vec3(0, 1, 0));\r
+ glm::mat4 result = glm::lookAt(pos, pos + forward, up);\r
+ return result;\r
+ }\r