Mouse look works properly when stationary

This commit is contained in:
karl 2020-01-07 21:38:26 +01:00
parent a262b60def
commit 0908a39aa5
4 changed files with 56 additions and 5 deletions

View File

@ -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);
}
};

View File

@ -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;
});
}

View File

@ -23,7 +23,7 @@ public:
shader.use();
shader.setMat4("projection", camera->projection);
shader.setMat4("view", camera->view);
shader.setMat4("view", cameraTransform->matrix);
pWorld->each<Mesh, Transform>([&](Entity *ent, ComponentHandle<Mesh> mesh, ComponentHandle<Transform> transform) {
shader.setMat4("model", transform->matrix);

View File

@ -125,6 +125,53 @@ int main() {
});
box->get<Transform>()->translate(glm::vec3(0.0f, 0.0f, -5.0f));
Entity *box2 = world->create();
box2->assign<Transform>();
box2->assign<Mesh>(std::vector<float>{
-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<Transform>()->translate(glm::vec3(5.0f, 0.0f, 0.0f));
Shader defaultShader("Shaders/default-vertex.vs", "Shaders/default-fragment.fs");
double timeInLastFrame = glfwGetTime();