From: Mikko Rasa Date: Tue, 14 Jul 2015 22:29:28 +0000 (+0300) Subject: Enable chaining of matrix modifiers X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=d8234c16eea3631c1b6e2c10f391ec86d9b97bfa;p=libs%2Fgl.git Enable chaining of matrix modifiers --- diff --git a/source/matrix.cpp b/source/matrix.cpp index ece99e34..ddc0cdf5 100644 --- a/source/matrix.cpp +++ b/source/matrix.cpp @@ -22,24 +22,25 @@ Matrix::Matrix(const LinAl::Matrix &other): Base(other) { } -void Matrix::multiply(const Matrix &other) +Matrix &Matrix::multiply(const Matrix &other) { *this = *this*other; + return *this; } -void Matrix::translate(const Vector3 &t) +Matrix &Matrix::translate(const Vector3 &t) { - multiply(translation(t)); + return multiply(translation(t)); } -void Matrix::rotate(const Angle &a, const Vector3 &x) +Matrix &Matrix::rotate(const Angle &a, const Vector3 &x) { - multiply(rotation(a, x)); + return multiply(rotation(a, x)); } -void Matrix::scale(const Vector3 &s) +Matrix &Matrix::scale(const Vector3 &s) { - multiply(scaling(s)); + return multiply(scaling(s)); } Matrix Matrix::operator*(const Matrix &other) const @@ -49,8 +50,7 @@ Matrix Matrix::operator*(const Matrix &other) const Matrix &Matrix::operator*=(const Matrix &other) { - multiply(other); - return *this; + return multiply(other); } Vector4 Matrix::operator*(const Vector4 &vec) const diff --git a/source/matrix.h b/source/matrix.h index 2dc3b972..95932bc6 100644 --- a/source/matrix.h +++ b/source/matrix.h @@ -23,18 +23,18 @@ public: const float *data() const { return &Base::operator()(0, 0); } - void multiply(const Matrix &); - void translate(float x, float y, float z) { translate(Vector3(x, y, z)); } - void translate(const Vector3 &); - void rotate(const Angle &a, float x, float y, float z) { rotate(a, Vector3(x, y, z)); } - void rotate(const Angle &, const Vector3 &); - void rotate(float a, float x, float y, float z) { rotate(Angle::from_radians(a), Vector3(x, y, z)); } - void rotate(float a, const Vector3 &x) { rotate(Angle::from_radians(a), x); } - void rotate_deg(float a, float x, float y, float z) { rotate(Angle::from_degrees(a), Vector3(x, y, z)); } - void rotate_deg(float a, const Vector3 & x) { rotate(Angle::from_degrees(a), x); } - void scale(float s) { scale(Vector3(s, s, s)); } - void scale(float x, float y, float z) { scale(Vector3(x, y, z)); } - void scale(const Vector3 &); + Matrix &multiply(const Matrix &); + Matrix &translate(float x, float y, float z) { return translate(Vector3(x, y, z)); } + Matrix &translate(const Vector3 &); + Matrix &rotate(const Angle &a, float x, float y, float z) { return rotate(a, Vector3(x, y, z)); } + Matrix &rotate(const Angle &, const Vector3 &); + Matrix &rotate(float a, float x, float y, float z) { return rotate(Angle::from_radians(a), Vector3(x, y, z)); } + Matrix &rotate(float a, const Vector3 &x) { return rotate(Angle::from_radians(a), x); } + Matrix &rotate_deg(float a, float x, float y, float z) { return rotate(Angle::from_degrees(a), Vector3(x, y, z)); } + Matrix &rotate_deg(float a, const Vector3 & x) { return rotate(Angle::from_degrees(a), x); } + Matrix &scale(float s) { return scale(Vector3(s, s, s)); } + Matrix &scale(float x, float y, float z) { return scale(Vector3(x, y, z)); } + Matrix &scale(const Vector3 &); Matrix operator*(const Matrix &) const; Matrix &operator*=(const Matrix &);