mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Work on matrix utils.
This commit is contained in:
parent
e79a7fff79
commit
012eb34307
@ -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;
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user