diff --git a/dependencies/VulkanMemoryAllocator b/dependencies/VulkanMemoryAllocator index 0e89587..c351692 160000 --- a/dependencies/VulkanMemoryAllocator +++ b/dependencies/VulkanMemoryAllocator @@ -1 +1 @@ -Subproject commit 0e89587db3ebee4d463f191bd296374c5fafc8ea +Subproject commit c351692490513cdb0e5a2c925aaf7ea4a9b672f4 diff --git a/res/engine/shaders/standard.vert b/res/engine/shaders/standard.vert index 1a0ef0d..0b00905 100644 --- a/res/engine/shaders/standard.vert +++ b/res/engine/shaders/standard.vert @@ -28,7 +28,7 @@ void main() { fragNorm = mat3(transpose(inverse(frameSetUniformBuffer.view * constants.model))) * inNorm; fragUV = inUV; - vec3 lightPos = vec3(2000.0, 2000.0, -2000.0); + vec3 lightPos = vec3(2000.0, -2000.0, 2000.0); fragLightPos = vec3(frameSetUniformBuffer.view * vec4(lightPos, 1.0)); gl_Position.y *= -1.0; diff --git a/src/util/model_loader.cpp b/src/util/model_loader.cpp index 2dee0b7..691e2f5 100644 --- a/src/util/model_loader.cpp +++ b/src/util/model_loader.cpp @@ -66,6 +66,13 @@ namespace engine::util { // get rotation glm::quat rotation = glm::quat_cast(transform); + // ASSIMP always makes the root node Y-up + // We want Z-up + if (parentNode->mParent == nullptr) { + // if this is the root node + rotation *= glm::angleAxis(glm::half_pi(), glm::vec3{1.0f, 0.0f, 0.0f}); + } + // update position, scale, rotation auto parentTransform = scene->GetComponent(parentObj); parentTransform->position = position; @@ -101,6 +108,7 @@ namespace engine::util { Entity LoadMeshFromFile(Scene* parent, const std::string& path, bool is_static) { + Assimp::Importer importer; class myStream : public Assimp::LogStream { diff --git a/test/res/models/MY_AXES.dae b/test/res/models/MY_AXES.dae index 658f570..29948e4 100644 --- a/test/res/models/MY_AXES.dae +++ b/test/res/models/MY_AXES.dae @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee415606d016bdfcfd9eb261f5542aacc48d62c398556e90b7dfb9f7805bfbd8 -size 52261 +oid sha256:674c700ecb534ffa0b9235d8099d27773a63cfd95cfa0aee976dba9469cd5dcf +size 51510 diff --git a/test/res/models/far_away_cube.dae b/test/res/models/far_away_cube.dae new file mode 100644 index 0000000..bcce2c8 --- /dev/null +++ b/test/res/models/far_away_cube.dae @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:300d236fc94d3cfa3b4c185f76bc2521aeb835cb8990432b639abd8d10d7106b +size 3534 diff --git a/test/res/models/uvcheck.dae b/test/res/models/uvcheck.dae index a64d265..b1988b1 100644 --- a/test/res/models/uvcheck.dae +++ b/test/res/models/uvcheck.dae @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e810911adc9fec4f480c75031ff1747760428a169701e5e1f9f3d2ad89a52b9a -size 4512 +oid sha256:4c0a17054a7d8c828f9436106d7e31139b1c9cc9f9bbbc982e540614c5e50fef +size 4459 diff --git a/test/src/camera_controller.cpp b/test/src/camera_controller.cpp index 75d7df1..85cbe12 100644 --- a/test/src/camera_controller.cpp +++ b/test/src/camera_controller.cpp @@ -36,12 +36,12 @@ void CameraControllerSystem::OnUpdate(float ts) { if (scene_->app()->input_manager()->GetButton("sprint")) speed *= 10.0f; float dx = scene_->app()->input_manager()->GetAxis("movex"); - float dz = (-scene_->app()->input_manager()->GetAxis("movey")); + float dy = (-scene_->app()->input_manager()->GetAxis("movey")); // calculate new pitch and yaw - constexpr float kMaxPitch = glm::half_pi(); - constexpr float kMinPitch = -kMaxPitch; + constexpr float kMaxPitch = glm::pi(); + constexpr float kMinPitch = 0.0f; float d_pitch = scene_->app()->input_manager()->GetAxis("looky") * -1.0f * c->kCameraSensitivity; @@ -53,10 +53,10 @@ void CameraControllerSystem::OnUpdate(float ts) { c->kCameraSensitivity; // update position relative to camera direction in xz plane - const glm::vec3 d2x_rotated = glm::rotateY(glm::vec3{dx, 0.0f, 0.0f}, c->yaw); - const glm::vec3 d2z_rotated = - glm::rotateY(glm::rotateX(glm::vec3{0.0f, 0.0f, dz}, c->pitch), c->yaw); - glm::vec3 h_vel = (d2x_rotated + d2z_rotated); + const glm::vec3 d2x_rotated = glm::rotateZ(glm::vec3{dx, 0.0f, 0.0f}, c->yaw); + const glm::vec3 d2y_rotated = + glm::rotateZ(glm::rotateX(glm::vec3{0.0f, 0.0f, dy}, c->pitch), c->yaw); + glm::vec3 h_vel = (d2x_rotated + d2y_rotated); h_vel *= speed; t->position += h_vel * dt; @@ -80,8 +80,8 @@ void CameraControllerSystem::OnUpdate(float ts) { const float half_yaw = c->yaw / 2.0f; glm::quat yaw_quat{}; yaw_quat.x = 0.0f; - yaw_quat.y = glm::sin(half_yaw); - yaw_quat.z = 0.0f; + yaw_quat.y = 0.0f; + yaw_quat.z = glm::sin(half_yaw); yaw_quat.w = glm::cos(half_yaw); // update rotation diff --git a/test/src/camera_controller.hpp b/test/src/camera_controller.hpp index 854b208..23dd4d0 100644 --- a/test/src/camera_controller.hpp +++ b/test/src/camera_controller.hpp @@ -10,7 +10,7 @@ struct CameraControllerComponent { static constexpr float kWalkSpeed = 4.0f; static constexpr float kCameraSensitivity = 0.007f; float yaw = 0.0f; - float pitch = 0.0f; + float pitch = glm::half_pi(); }; class CameraControllerSystem diff --git a/test/src/game.cpp b/test/src/game.cpp index f2db5ce..0b41c78 100644 --- a/test/src/game.cpp +++ b/test/src/game.cpp @@ -57,7 +57,7 @@ void PlayGame(GameSettings settings) { ConfigureInputs(app.input_manager()); { - auto my_scene = app.scene_manager()->CreateEmptyScene(); + static auto my_scene = app.scene_manager()->CreateEmptyScene(); /* create camera */ { @@ -68,7 +68,7 @@ void PlayGame(GameSettings settings) { auto camera_transform = my_scene->GetComponent(camera); - camera_transform->position = {0.0f, 10.0f, 0.0f}; + camera_transform->position = {0.0f, 0.0f, 10.0f}; my_scene->RegisterComponent(); my_scene->RegisterSystem(); @@ -119,7 +119,7 @@ void PlayGame(GameSettings settings) { my_scene, app.GetResourcePath("models/cobble_house/cobble_house.dae"), false); my_scene->GetComponent(cobbleHouse) - ->position += glm::vec3{33.0f, 0.1f, 35.0f}; + ->position += glm::vec3{33.0f, 35.0f, 0.1f}; auto cobbleCustom = my_scene->AddComponent(cobbleHouse); cobbleCustom->onInit = [](void) { @@ -132,6 +132,8 @@ void PlayGame(GameSettings settings) { }; } + static auto cube = engine::util::LoadMeshFromFile(my_scene, app.GetResourcePath("models/far_away_cube.dae"), true); + /* some text */ { engine::Entity textbox = @@ -153,6 +155,7 @@ void PlayGame(GameSettings settings) { engine::util::LoadMeshFromFile(my_scene, app.GetResourcePath("models/MY_AXES.dae"), true); my_scene->GetComponent(engine::util::LoadMeshFromFile(my_scene, app.GetResourcePath("models/uvcheck.dae"), true))->position += glm::vec3{20.0f, 20.0f, 20.0f}; + /* teapot */ my_scene ->GetComponent(