Replace output parameters with return values

This commit is contained in:
Chris Thrasher 2024-10-16 17:30:23 -06:00
parent 1df88e5664
commit ac9fc88c4a
No known key found for this signature in database
GPG Key ID: 56FB686C9DFC8E2C

View File

@ -29,18 +29,18 @@ namespace
using Matrix = std::array<std::array<float, 4>, 4>; using Matrix = std::array<std::array<float, 4>, 4>;
// Multiply 2 matrices // Multiply 2 matrices
void matrixMultiply(Matrix& result, const Matrix& left, const Matrix& right) Matrix matrixMultiply(const Matrix& left, const Matrix& right)
{ {
Matrix temp; Matrix matrix;
for (std::size_t i = 0; i < temp.size(); ++i) for (std::size_t i = 0; i < matrix.size(); ++i)
{ {
for (std::size_t j = 0; j < temp[0].size(); ++j) for (std::size_t j = 0; j < matrix[0].size(); ++j)
temp[i][j] = left[0][j] * right[i][0] + left[1][j] * right[i][1] + left[2][j] * right[i][2] + matrix[i][j] = left[0][j] * right[i][0] + left[1][j] * right[i][1] + left[2][j] * right[i][2] +
left[3][j] * right[i][3]; left[3][j] * right[i][3];
} }
result = temp; return matrix;
} }
// Rotate a matrix around the x-axis // Rotate a matrix around the x-axis
@ -57,7 +57,7 @@ void matrixRotateX(Matrix& result, sf::Angle angle)
}}; }};
// clang-format on // clang-format on
matrixMultiply(result, result, matrix); result = matrixMultiply(result, matrix);
} }
// Rotate a matrix around the y-axis // Rotate a matrix around the y-axis
@ -74,7 +74,7 @@ void matrixRotateY(Matrix& result, sf::Angle angle)
}}; }};
// clang-format on // clang-format on
matrixMultiply(result, result, matrix); result = matrixMultiply(result, matrix);
} }
// Rotate a matrix around the z-axis // Rotate a matrix around the z-axis
@ -91,11 +91,11 @@ void matrixRotateZ(Matrix& result, sf::Angle angle)
}}; }};
// clang-format on // clang-format on
matrixMultiply(result, result, matrix); result = matrixMultiply(result, matrix);
} }
// Construct a lookat view matrix // Construct a lookat view matrix
void matrixLookAt(Matrix& result, const sf::Vector3f& eye, const sf::Vector3f& center, const sf::Vector3f& up) Matrix matrixLookAt(const sf::Vector3f& eye, const sf::Vector3f& center, const sf::Vector3f& up)
{ {
// Forward-looking vector // Forward-looking vector
const sf::Vector3f forward = (center - eye).normalized(); const sf::Vector3f forward = (center - eye).normalized();
@ -103,6 +103,7 @@ void matrixLookAt(Matrix& result, const sf::Vector3f& eye, const sf::Vector3f& c
// Side vector (Forward cross product Up) // Side vector (Forward cross product Up)
const sf::Vector3f side = forward.cross(up).normalized(); const sf::Vector3f side = forward.cross(up).normalized();
Matrix result;
result[0][0] = side.x; result[0][0] = side.x;
result[0][1] = side.y * forward.z - side.z * forward.y; result[0][1] = side.y * forward.z - side.z * forward.y;
result[0][2] = -forward.x; result[0][2] = -forward.x;
@ -122,13 +123,16 @@ void matrixLookAt(Matrix& result, const sf::Vector3f& eye, const sf::Vector3f& c
result[3][1] = (-eye.x) * result[0][1] + (-eye.y) * result[1][1] + (-eye.z) * result[2][1]; result[3][1] = (-eye.x) * result[0][1] + (-eye.y) * result[1][1] + (-eye.z) * result[2][1];
result[3][2] = (-eye.x) * result[0][2] + (-eye.y) * result[1][2] + (-eye.z) * result[2][2]; result[3][2] = (-eye.x) * result[0][2] + (-eye.y) * result[1][2] + (-eye.z) * result[2][2];
result[3][3] = (-eye.x) * result[0][3] + (-eye.y) * result[1][3] + (-eye.z) * result[2][3] + 1.0f; result[3][3] = (-eye.x) * result[0][3] + (-eye.y) * result[1][3] + (-eye.z) * result[2][3] + 1.0f;
return result;
} }
// Construct a perspective projection matrix // Construct a perspective projection matrix
void matrixPerspective(Matrix& result, sf::Angle fov, float aspect, float nearPlane, float farPlane) Matrix matrixPerspective(sf::Angle fov, float aspect, float nearPlane, float farPlane)
{ {
const float a = 1.f / std::tan(fov.asRadians() / 2.f); const float a = 1.f / std::tan(fov.asRadians() / 2.f);
Matrix result;
result[0][0] = a / aspect; result[0][0] = a / aspect;
result[0][1] = 0.f; result[0][1] = 0.f;
result[0][2] = 0.f; result[0][2] = 0.f;
@ -148,6 +152,8 @@ void matrixPerspective(Matrix& result, sf::Angle fov, float aspect, float nearPl
result[3][1] = 0.f; result[3][1] = 0.f;
result[3][2] = -((2.f * farPlane * nearPlane) / (farPlane - nearPlane)); result[3][2] = -((2.f * farPlane * nearPlane) / (farPlane - nearPlane));
result[3][3] = 0.f; result[3][3] = 0.f;
return result;
} }
// Helper function we pass to GLAD to load Vulkan functions via SFML // Helper function we pass to GLAD to load Vulkan functions via SFML
@ -2412,8 +2418,7 @@ public:
const sf::Vector3f center(0.0f, 0.0f, 0.0f); const sf::Vector3f center(0.0f, 0.0f, 0.0f);
const sf::Vector3f up(0.0f, 0.0f, 1.0f); const sf::Vector3f up(0.0f, 0.0f, 1.0f);
Matrix view; const Matrix view = matrixLookAt(eye, center, up);
matrixLookAt(view, eye, center, up);
// Construct the projection matrix // Construct the projection matrix
const sf::Angle fov = sf::degrees(45); const sf::Angle fov = sf::degrees(45);
@ -2421,9 +2426,7 @@ public:
const float nearPlane = 0.1f; const float nearPlane = 0.1f;
const float farPlane = 10.0f; const float farPlane = 10.0f;
Matrix projection; const Matrix projection = matrixPerspective(fov, aspect, nearPlane, farPlane);
matrixPerspective(projection, fov, aspect, nearPlane, farPlane);
char* ptr = nullptr; char* ptr = nullptr;