mirror of
https://github.com/SFML/SFML.git
synced 2024-11-24 20:31:05 +08:00
Replace output parameters with return values
This commit is contained in:
parent
1df88e5664
commit
ac9fc88c4a
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user