Work on matrix utils.

This commit is contained in:
Chinmay Garde 2021-06-23 15:01:38 -07:00 committed by Dan Field
parent e79a7fff79
commit 012eb34307
4 changed files with 32 additions and 25 deletions

View File

@ -41,15 +41,13 @@ bool EntityRenderer::OnRender(RenderPass& pass) {
shader::BoxVertexInfo::UniformBuffer uniforms;
uniforms.color = Color::Blue();
uniforms.mvp = Matrix::MakeOrthographic({800, 600});
uniforms.mvp =
Matrix::MakeOrthographic({800, 600}).Scale({200.0, 200.0, 1.0});
VertexBufferBuilder vertex_builder;
vertex_builder.AddVertices({
{-0.5, 0.5, 1.0}, //
{0.5, 0.5, 1.0}, //
{0.5, -0.5, 1.0}, //
{0.5, -0.5, 1.0}, //
{-0.5, -0.5, 1.0}, //
{-0.5, 0.5, 1.0}, //
{0, 0.5, 0.0}, //
{0.5, -0.5, 0.0}, //
{-0.5, -0.5, 0.0}, //
});
Command cmd;

View File

@ -95,20 +95,19 @@ Matrix Matrix::MakeOrthographic(Scalar left,
Scalar rsl = right - left;
Scalar tab = top + bottom;
Scalar tsb = top - bottom;
Scalar fan = farZ + nearZ;
// Scalar fan = farZ + nearZ;
Scalar fsn = farZ - nearZ;
// clang-format off
return Matrix(2.0 / rsl, 0.0, 0.0, 0.0,
0.0, 2.0 / tsb, 0.0, 0.0,
0.0, 0.0, -2.0 / fsn, 0.0,
-ral / rsl, -tab / tsb, -fan / fsn, 1.0);
return Matrix(2.0 / rsl, 0.0, 0.0, 0.0,
0.0, 2.0 / tsb, 0.0, 0.0,
0.0, 0.0, -1.0 / fsn, 0.0,
-ral / rsl, -tab / tsb, -nearZ / fsn, 1.0);
// clang-format on
}
Matrix Matrix::MakeOrthographic(const Size& size) {
return Matrix::MakeOrthographic(0, size.width, size.height, 0, -INT_MAX,
INT_MAX);
return Matrix::MakeOrthographic(0, size.width, size.height, 0, 0.0, 1.0);
}
Matrix Matrix::MakePerspective(Scalar fov,
@ -210,15 +209,6 @@ Matrix Matrix::Invert() const {
tmp.m[12] * det, tmp.m[13] * det, tmp.m[14] * det, tmp.m[15] * det};
}
Matrix Matrix::Transpose() const {
return {
m[0], m[4], m[8], m[12], //
m[1], m[5], m[9], m[13], //
m[2], m[6], m[10], m[14], //
m[3], m[7], m[11], m[15], //
};
}
Scalar Matrix::GetDeterminant() const {
auto a00 = e[0][0];
auto a01 = e[0][1];

View File

@ -16,6 +16,18 @@
namespace impeller {
//------------------------------------------------------------------------------
/// @brief A 4x4 matrix using column-major storage.
///
/// Utility methods that need to make assumptions about normalized
/// device coordinates use the following convention:
/// * Left-handed coordinate system. Positive rotation is
/// clockwise about axis of rotation.
/// * Lower left corner is -1.0, -1.0.
/// * Upper left corner is 1.0, 1.0.
/// * Visible z-space is from 0.0 to 1.0.
/// * NOTE: This is not the same as OpenGL conventions!
/// * Center is at (0.0, 0.0, 0.5).
struct Matrix {
union {
Scalar m[16];
@ -226,7 +238,14 @@ struct Matrix {
// clang-format on
}
Matrix Transpose() const;
constexpr Matrix Transpose() const {
return {
m[0], m[4], m[8], m[12], //
m[1], m[5], m[9], m[13], //
m[2], m[6], m[10], m[14], //
m[3], m[7], m[11], m[15], //
};
}
Matrix Invert() const;

View File

@ -11,6 +11,6 @@ in vec3 vertexPosition;
out vec3 color;
void main() {
gl_Position = vec4(vertexPosition, 1.0);
gl_Position = uniforms.mvp * vec4(vertexPosition, 1.0);
color = uniforms.color;
}