From ccbe042ede05efb0b1f2be37fe924f897c17d907 Mon Sep 17 00:00:00 2001 From: Sebastian Gaida <gaida@ca-digit.com> Date: Mon, 21 Jun 2021 19:29:13 +0200 Subject: [PATCH] [#69] merge fix from #60 and test code --- projects/CMakeLists.txt | 1 - projects/particle_simulation/src/main.cpp | 46 +++++++++++++---------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/projects/CMakeLists.txt b/projects/CMakeLists.txt index 3098bd55..2136eac0 100644 --- a/projects/CMakeLists.txt +++ b/projects/CMakeLists.txt @@ -5,4 +5,3 @@ add_subdirectory(first_mesh) add_subdirectory(particle_simulation) add_subdirectory(first_scene) add_subdirectory(voxelization) -add_subdirectory(voxelization) diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp index df66d39c..a9c3e259 100644 --- a/projects/particle_simulation/src/main.cpp +++ b/projects/particle_simulation/src/main.cpp @@ -19,10 +19,7 @@ int main(int argc, const char **argv) { true ); - vkcv::CameraManager cameraManager(window, windowWidth, windowHeight); - cameraManager.getCamera().setNearFar(0.000000001f, 10.f); - - window.initEvents(); + vkcv::camera::CameraManager cameraManager(window); vkcv::Core core = vkcv::Core::create( window, @@ -43,7 +40,7 @@ int main(int argc, const char **argv) { const vkcv::AttachmentDescription present_color_attachment( vkcv::AttachmentOperation::STORE, vkcv::AttachmentOperation::CLEAR, - core.getSwapchainImageFormat()); + core.getSwapchain().getFormat()); vkcv::PassConfig particlePassDefinition({present_color_attachment}); @@ -94,14 +91,14 @@ int main(int argc, const char **argv) { const vkcv::VertexLayout particleLayout(bindings); - const vkcv::PipelineConfig particlePipelineDefinition( + const vkcv::PipelineConfig particlePipelineDefinition{ particleShaderProgram, UINT32_MAX, UINT32_MAX, particlePass, {particleLayout}, {core.getDescriptorSet(descriptorSet).layout}, - true); + true}; const std::vector<glm::vec3> vertices = {glm::vec3(-0.005, 0.005, 0), glm::vec3(0.005, 0.005, 0), @@ -170,18 +167,25 @@ int main(int argc, const char **argv) { // borders are assumed to be 0.5 //pos = glm::vec2((pos.x -0.5f * static_cast<float>(window.getWidth()))/static_cast<float>(window.getWidth()), (pos.y -0.5f * static_cast<float>(window.getHeight()))/static_cast<float>(window.getHeight())); //borders are assumed to be 1 - pos.x = (2 * pos.x - static_cast<float>(window.getWidth())) / static_cast<float>(window.getWidth()); - pos.y = (2 * pos.y - static_cast<float>(window.getHeight())) / static_cast<float>(window.getHeight()); - glm::vec4 camera_pos = glm::column(cameraManager.getCamera().getView(), 3); + pos.x = (-2 * pos.x + static_cast<float>(window.getWidth())) / static_cast<float>(window.getWidth()); + pos.y = (-2 * pos.y + static_cast<float>(window.getHeight())) / static_cast<float>(window.getHeight()); + glm::vec4 row1 = glm::row(cameraManager.getCamera(0).getView(), 0); + glm::vec4 row2 = glm::row(cameraManager.getCamera(0).getView(), 1); + glm::vec4 row3 = glm::row(cameraManager.getCamera(0).getView(), 2); + glm::vec4 camera_pos = glm::column(cameraManager.getCamera(0).getView(), 3); + std::cout << "row1: " << row1.x << ", " << row1.y << ", " << row1.z << std::endl; + std::cout << "row2: " << row2.x << ", " << row2.y << ", " << row2.z << std::endl; + std::cout << "row3: " << row3.x << ", " << row3.y << ", " << row3.z << std::endl; + std::cout << "camerapos: " << camera_pos.x << ", " << camera_pos.y << ", " << camera_pos.z << std::endl; std::cout << "camerapos: " << camera_pos.x << ", " << camera_pos.y << ", " << camera_pos.z << std::endl; //glm::vec4 view_axis = glm::row(cameraManager.getCamera().getView(), 2); // std::cout << "view_axis: " << view_axis.x << ", " << view_axis.y << ", " << view_axis.z << std::endl; //std::cout << "Front: " << cameraManager.getCamera().getFront().x << ", " << cameraManager.getCamera().getFront().z << ", " << cameraManager.getCamera().getFront().z << std::endl; - glm::mat4 viewmat = cameraManager.getCamera().getView(); + glm::mat4 viewmat = cameraManager.getCamera(0).getView(); spawnPosition = glm::vec3(pos.x, pos.y, 0.f); - tempPosition = glm::inverse(viewmat) * glm::vec4(spawnPosition, 1.0f); + tempPosition = viewmat * glm::vec4(spawnPosition, 1.0f); spawnPosition = glm::vec3(tempPosition.x, tempPosition.y, tempPosition.z); - particleSystem.setRespawnPos(glm::vec3(-spawnPosition.x, -spawnPosition.y, -spawnPosition.z)); + particleSystem.setRespawnPos(glm::vec3(-spawnPosition.x, -spawnPosition.y, spawnPosition.z)); std::cout << "respawn pos: " << spawnPosition.x << ", " << spawnPosition.y << ", " << spawnPosition.z << std::endl; }); @@ -195,8 +199,12 @@ int main(int argc, const char **argv) { auto start = std::chrono::system_clock::now(); glm::vec4 colorData = glm::vec4(1.0f, 1.0f, 0.0f, 1.0f); - cameraManager.getCamera().setPosition(glm::vec3(0.f, 0.f, 0.f)); - std::cout << "FRONT: " << cameraManager.getCamera().getFront().x << ", " << cameraManager.getCamera().getFront().y << ", " << cameraManager.getCamera().getFront().z << std::endl; + uint32_t camIndex0 = cameraManager.addCamera(vkcv::camera::ControllerType::PILOT); + uint32_t camIndex1 = cameraManager.addCamera(vkcv::camera::ControllerType::TRACKBALL); + + cameraManager.getCamera(camIndex0).setPosition(glm::vec3(0, 0, -2)); + cameraManager.getCamera(camIndex1).setPosition(glm::vec3(0.0f, 0.0f, 0.0f)); + cameraManager.getCamera(camIndex1).setCenter(glm::vec3(0.0f, 0.0f, -1.0f)); while (window.isWindowOpen()) { window.pollEvents(); @@ -211,20 +219,20 @@ int main(int argc, const char **argv) { position.fill(&pos); auto end = std::chrono::system_clock::now(); - float deltatime = std::chrono::duration<float>(end - start).count(); + auto deltatime = std::chrono::duration_cast<std::chrono::microseconds>(end - start); start = end; - particleSystem.updateParticles(deltatime); + particleSystem.updateParticles(0.000001 * static_cast<float>(deltatime.count())); modelMatrices.clear(); for (Particle particle : particleSystem.getParticles()) { modelMatrices.push_back(glm::translate(glm::mat4(1.f), particle.getPosition())); } - cameraManager.getCamera().updateView(deltatime); + cameraManager.update(0.000001 * static_cast<double>(deltatime.count())); std::vector<glm::mat4> mvp; mvp.clear(); for (const auto &m : modelMatrices) { - mvp.push_back(m * cameraManager.getCamera().getProjection() * cameraManager.getCamera().getView()); + mvp.push_back(m * cameraManager.getActiveCamera().getMVP()); } vkcv::PushConstantData pushConstantData((void *) mvp.data(), sizeof(glm::mat4)); -- GitLab