diff --git a/ECS/Components/Transform.h b/ECS/Components/Transform.h index 593f7c7..1b48678 100644 --- a/ECS/Components/Transform.h +++ b/ECS/Components/Transform.h @@ -35,15 +35,15 @@ struct Transform { } glm::vec3 forward() { - return matrix * glm::vec4(0.0, 0.0, -1.0, 1.0); + return matrix * glm::vec4(0.0, 0.0, -1.0, 0.0); } glm::vec3 up() { - return matrix * glm::vec4(0.0, 1.0, 0.0, 1.0); + return matrix * glm::vec4(0.0, 1.0, 0.0, 0.0); } glm::vec3 right() { - return matrix * glm::vec4(1.0, 0.0, 0.0, 1.0); + return matrix * glm::vec4(1.0, 0.0, 0.0, 0.0); } }; diff --git a/ECS/Systems/MouseLookSystem.h b/ECS/Systems/MouseLookSystem.h index fbfcfbf..54ee472 100644 --- a/ECS/Systems/MouseLookSystem.h +++ b/ECS/Systems/MouseLookSystem.h @@ -56,7 +56,11 @@ public: glm::vec3 cameraUp = glm::vec3(0.0, 1.0, 0.0); glm::vec3 cameraRight = glm::cross(cameraFront, cameraUp); - camera->view = glm::lookAt(cameraOrigin, cameraOrigin + cameraFront, cameraUp); + glm::mat4x4 lookAt = glm::lookAt(cameraOrigin, cameraOrigin + cameraFront, cameraUp); + + lookAt[3] = glm::vec4(cameraOrigin, 1.0); + + transform->matrix = lookAt; }); } diff --git a/ECS/Systems/RenderSystem.h b/ECS/Systems/RenderSystem.h index 6a2c687..dcb03e5 100644 --- a/ECS/Systems/RenderSystem.h +++ b/ECS/Systems/RenderSystem.h @@ -23,7 +23,7 @@ public: shader.use(); shader.setMat4("projection", camera->projection); - shader.setMat4("view", camera->view); + shader.setMat4("view", cameraTransform->matrix); pWorld->each([&](Entity *ent, ComponentHandle mesh, ComponentHandle transform) { shader.setMat4("model", transform->matrix); diff --git a/main.cpp b/main.cpp index 760a802..bd895fd 100644 --- a/main.cpp +++ b/main.cpp @@ -125,6 +125,53 @@ int main() { }); box->get()->translate(glm::vec3(0.0f, 0.0f, -5.0f)); + Entity *box2 = world->create(); + box2->assign(); + box2->assign(std::vector{ + -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, + 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, + + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + + -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + -0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, -0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, + -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, + -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, + + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, + 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, + -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, + -0.5f, 0.5f, -0.5f, 0.0f, 1.0f + }); + box2->get()->translate(glm::vec3(5.0f, 0.0f, 0.0f)); + Shader defaultShader("Shaders/default-vertex.vs", "Shaders/default-fragment.fs"); double timeInLastFrame = glfwGetTime();