This commit is contained in:
Mars 2024-10-23 13:10:18 -04:00
parent 5b7f400b7b
commit 2fa8e016da
Signed by: pupbrained
GPG key ID: 874E22DF2F9DFCB5
2 changed files with 61 additions and 9 deletions

View file

@ -2,11 +2,11 @@
"nodes": { "nodes": {
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1729293761, "lastModified": 1729632202,
"narHash": "sha256-bkAI9eZGSR+RqM/ZpBV7eZAwHtek9oPC7Ma2TFN0FnQ=", "narHash": "sha256-BqWFOqG9Iuzf5wm9dyVWPeH1SPxSjCxo3inUSnYqxaQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "f1812eb562c2253492e7f2f0122b40177e46826c", "rev": "5a95c26209c2e136ef7da309824f562253b5fd7a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -58,11 +58,11 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1729242555, "lastModified": 1729613947,
"narHash": "sha256-6jWSWxv2crIXmYSEb3LEVsFkCkyVHNllk61X4uhqfCs=", "narHash": "sha256-XGOvuIPW1XRfPgHtGYXd5MAmJzZtOuwlfKDgxX5KT3s=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "d986489c1c757f6921a48c1439f19bfb9b8ecab5", "rev": "aac86347fb5063960eccb19493e0cadcdb4205ca",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -200,6 +200,8 @@ class VulkanApp {
bool mFramebufferResized = false; ///< Flag indicating if the framebuffer was resized bool mFramebufferResized = false; ///< Flag indicating if the framebuffer was resized
u32 mCurrentFrame = 0; ///< Index of the current frame being rendered u32 mCurrentFrame = 0; ///< Index of the current frame being rendered
glm::mat4 mView; ///< View matrix
/** /**
* @brief Struct to store queue family indices. * @brief Struct to store queue family indices.
* *
@ -240,6 +242,40 @@ class VulkanApp {
alignas(16) glm::mat4 proj; ///< Projection matrix alignas(16) glm::mat4 proj; ///< Projection matrix
}; };
struct Camera {
glm::dvec3 position;
glm::dvec3 front;
glm::dvec3 up;
f64 speed {};
Camera() : position(2.0, 2.0, 2.0), front(0.0, 0.0, 0.0), up(0.0, 0.0, 1.0) {}
[[nodiscard]] fn getViewMatrix() const -> glm::mat4 { return glm::lookAt(position, front, up); }
fn moveForward(f64 deltaTime) -> void { position += speed * front * deltaTime; }
fn moveBackward(f64 deltaTime) -> void { position -= speed * front * deltaTime; }
fn moveLeft(f64 deltaTime) -> void {
position -= glm::normalize(glm::cross(front, up)) * speed * deltaTime;
}
fn moveRight(f64 deltaTime) -> void {
position += glm::normalize(glm::cross(front, up)) * speed * deltaTime;
}
};
static fn processInput(vkfw::Window& window, Camera& camera, const f64& deltaTime) -> void {
if (window.getKey(vkfw::Key::eW) == vkfw::eTrue)
camera.moveForward(deltaTime);
if (window.getKey(vkfw::Key::eA) == vkfw::eTrue)
camera.moveLeft(deltaTime);
if (window.getKey(vkfw::Key::eS) == vkfw::eTrue)
camera.moveBackward(deltaTime);
if (window.getKey(vkfw::Key::eD) == vkfw::eTrue)
camera.moveRight(deltaTime);
}
/** /**
* @brief Update the FPS counter in the window title. * @brief Update the FPS counter in the window title.
* *
@ -415,8 +451,25 @@ class VulkanApp {
* polls for events and draws frames until the window is closed. * polls for events and draws frames until the window is closed.
*/ */
fn mainLoop() -> void { fn mainLoop() -> void {
Camera camera;
// Set initial time variables
f64 lastFrame = 0.0;
f64 deltaTime = 0.0;
// While the window is open, // While the window is open,
while (!mWindow->shouldClose()) { while (!mWindow->shouldClose()) {
// Calculate time between frames
f64 currentFrame = vkfw::getTime();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
// Process input for camera movement
processInput(mWindow.get(), camera, deltaTime);
// Create view matrix from camera
mView = camera.getViewMatrix();
// Update the FPS counter // Update the FPS counter
updateFPS(mWindow.get(), "Vulkan"); updateFPS(mWindow.get(), "Vulkan");
@ -2087,14 +2140,13 @@ class VulkanApp {
// Model matrix - glm::rotate(matrix, angle, axis) // Model matrix - glm::rotate(matrix, angle, axis)
.model = glm::rotate(glm::mat4(1.0F), time * glm::radians(90.0F), glm::vec3(0.0F, 0.0F, 1.0F)), .model = glm::rotate(glm::mat4(1.0F), time * glm::radians(90.0F), glm::vec3(0.0F, 0.0F, 1.0F)),
// View matrix - glm::lookAt(eye, center, up) // View matrix - glm::lookAt(eye, center, up)
.view = .view = mView,
glm::lookAt(glm::vec3(2.0F, 2.0F, 2.0F), glm::vec3(0.0F, 0.0F, 0.0F), glm::vec3(0.0F, 0.0F, 1.0F)),
// Projection matrix - glm::perspective(fov, aspect, near, far) // Projection matrix - glm::perspective(fov, aspect, near, far)
.proj = glm::perspective( .proj = glm::perspective(
glm::radians(45.0F), glm::radians(45.0F),
static_cast<f32>(mSwapChainExtent.width) / static_cast<f32>(mSwapChainExtent.height), static_cast<f32>(mSwapChainExtent.width) / static_cast<f32>(mSwapChainExtent.height),
0.1F, 0.1F,
10.0F 100.0F
) )
}; };