Small but effective optimisations.
Allow inlining the function helps a bit!
This commit is contained in:
@@ -19,6 +19,8 @@
|
|||||||
#undef minor
|
#undef minor
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define FastGet4(_x, _y) (this->data[4 * (_x) + (_y)])
|
||||||
|
|
||||||
class Matrix
|
class Matrix
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
@@ -46,7 +48,12 @@ public:
|
|||||||
bool isInvertible() { return this->determinant() != 0; }
|
bool isInvertible() { return this->determinant() != 0; }
|
||||||
|
|
||||||
Matrix operator*(const Matrix &b) const;
|
Matrix operator*(const Matrix &b) const;
|
||||||
Tuple operator*(const Tuple &b) const;
|
Tuple operator*(const Tuple &b) const {
|
||||||
|
return Tuple(b.x * FastGet4(0, 0) + b.y * FastGet4(0, 1) + b.z * FastGet4(0, 2) + b.w * FastGet4(0, 3),
|
||||||
|
b.x * FastGet4(1, 0) + b.y * FastGet4(1, 1) + b.z * FastGet4(1, 2) + b.w * FastGet4(1, 3),
|
||||||
|
b.x * FastGet4(2, 0) + b.y * FastGet4(2, 1) + b.z * FastGet4(2, 2) + b.w * FastGet4(2, 3),
|
||||||
|
b.x * FastGet4(3, 0) + b.y * FastGet4(3, 1) + b.z * FastGet4(3, 2) + b.w * FastGet4(3, 3));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Matrix4: public Matrix
|
class Matrix4: public Matrix
|
||||||
|
|||||||
@@ -44,8 +44,18 @@ public:
|
|||||||
void set(double nX, double nY, double nZ) { this->x = nX; this->y = nY; this->z = nZ; };
|
void set(double nX, double nY, double nZ) { this->x = nX; this->y = nY; this->z = nZ; };
|
||||||
double magnitude();
|
double magnitude();
|
||||||
Tuple normalise();
|
Tuple normalise();
|
||||||
double dot(const Tuple &b);
|
|
||||||
Tuple cross(const Tuple &b) const;
|
double dot(const Tuple &b) {
|
||||||
|
return this->x * b.x + this->y * b.y + this->z * b.z + this->w * b.w;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tuple cross(const Tuple &b) const {
|
||||||
|
return Tuple(this->y * b.z - this->z * b.y,
|
||||||
|
this->z * b.x - this->x * b.z,
|
||||||
|
this->x * b.y - this->y * b.x,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
Tuple reflect(const Tuple &normal);
|
Tuple reflect(const Tuple &normal);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -101,9 +101,10 @@ Matrix Matrix::operator*(const Matrix &b) const
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FastGet4(_x, _y) (this->data[4 * (_x) + (_y)])
|
//#define FastGet4(_x, _y) (this->data[4 * (_x) + (_y)])
|
||||||
|
|
||||||
/* TODO: Check if we can optimise this function. It is called a lot */
|
/* TODO: Check if we can optimise this function. It is called a lot */
|
||||||
|
/*
|
||||||
Tuple Matrix::operator*(const Tuple &b) const
|
Tuple Matrix::operator*(const Tuple &b) const
|
||||||
{
|
{
|
||||||
return Tuple(b.x * FastGet4(0, 0) + b.y * FastGet4(0, 1) + b.z * FastGet4(0, 2) + b.w * FastGet4(0, 3),
|
return Tuple(b.x * FastGet4(0, 0) + b.y * FastGet4(0, 1) + b.z * FastGet4(0, 2) + b.w * FastGet4(0, 3),
|
||||||
@@ -111,7 +112,7 @@ Tuple Matrix::operator*(const Tuple &b) const
|
|||||||
b.x * FastGet4(2, 0) + b.y * FastGet4(2, 1) + b.z * FastGet4(2, 2) + b.w * FastGet4(2, 3),
|
b.x * FastGet4(2, 0) + b.y * FastGet4(2, 1) + b.z * FastGet4(2, 2) + b.w * FastGet4(2, 3),
|
||||||
b.x * FastGet4(3, 0) + b.y * FastGet4(3, 1) + b.z * FastGet4(3, 2) + b.w * FastGet4(3, 3));
|
b.x * FastGet4(3, 0) + b.y * FastGet4(3, 1) + b.z * FastGet4(3, 2) + b.w * FastGet4(3, 3));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
Matrix Matrix::identity()
|
Matrix Matrix::identity()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Tuple Tuple::normalise()
|
|||||||
|
|
||||||
return Tuple(this->x / mag, this->y / mag, this->z / mag, this->w / mag);
|
return Tuple(this->x / mag, this->y / mag, this->z / mag, this->w / mag);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
double Tuple::dot(const Tuple &b)
|
double Tuple::dot(const Tuple &b)
|
||||||
{
|
{
|
||||||
return this->x * b.x + this->y * b.y + this->z * b.z + this->w * b.w;
|
return this->x * b.x + this->y * b.y + this->z * b.z + this->w * b.w;
|
||||||
@@ -39,7 +39,7 @@ Tuple Tuple::cross(const Tuple &b) const
|
|||||||
this->x * b.y - this->y * b.x,
|
this->x * b.y - this->y * b.x,
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
Tuple Tuple::reflect(const Tuple &normal)
|
Tuple Tuple::reflect(const Tuple &normal)
|
||||||
{
|
{
|
||||||
return *this - normal * 2 * this->dot(normal);
|
return *this - normal * 2 * this->dot(normal);
|
||||||
|
|||||||
Reference in New Issue
Block a user