view matrix + half projection matrix
This commit is contained in:
parent
67e4855211
commit
d550baa11e
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Disable line-ending normalization in this repository.
|
||||||
|
* -text
|
||||||
|
|
@ -92,5 +92,10 @@ namespace Math
|
||||||
0, 0, 0, 1
|
0, 0, 0, 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Vector3 cross(const Vector3& vec1, const Vector3& vec2)
|
||||||
|
{
|
||||||
|
return vec1.cross(vec2);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#include "Matrix4x4.h"
|
#include "Matrix4x4.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include <Vector3.h>
|
#include <Vector3.h>
|
||||||
|
#include "MathUtil.h"
|
||||||
|
|
||||||
namespace Scene
|
namespace Scene
|
||||||
{
|
{
|
||||||
|
|
@ -9,20 +10,20 @@ namespace Scene
|
||||||
{
|
{
|
||||||
using namespace Math;
|
using namespace Math;
|
||||||
|
|
||||||
Vector3 forward = (target - position).normalized();
|
Vector3 backward = (position - target).normalized();
|
||||||
Vector3 right = forward.cross(up).normalized();
|
Vector3 right = MathUtil::cross(up, backward).normalized();
|
||||||
if (right.magnitude() < 1e-5) right = forward.cross(Vector3(0, 1, 0));
|
if (right.magnitude() < 1e-5) right = MathUtil::cross(Vector3(0, 1, 0), backward);
|
||||||
Vector3 cameraUp = right.cross(forward);
|
Vector3 cameraUp = MathUtil::cross(backward, right);
|
||||||
|
|
||||||
return Matrix4x4(
|
return Matrix4x4(
|
||||||
right.x, right.y, right.z, -right.dot(position),
|
right.x, right.y, right.z, -right.dot(position),
|
||||||
cameraUp.x, cameraUp.y, cameraUp.z, -cameraUp.dot(position),
|
cameraUp.x, cameraUp.y, cameraUp.z, -cameraUp.dot(position),
|
||||||
-forward.x, -forward.y, -forward.z, forward.dot(position),
|
backward.x, backward.y, backward.z, -backward.dot(position),
|
||||||
0, 0, 0, 1
|
0, 0, 0, 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Math::Matrix4x4 Camera::get_projection_matrix(float aspectRatio) const
|
Math::Matrix4x4 Camera::get_orthographic_projection_matrix(float aspectRatio) const
|
||||||
{
|
{
|
||||||
using namespace Math;
|
using namespace Math;
|
||||||
|
|
||||||
|
|
@ -30,4 +31,24 @@ namespace Scene
|
||||||
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Math::Matrix4x4 Camera::get_perspective_projection_matrix(float width, float height) const
|
||||||
|
{
|
||||||
|
using namespace Math;
|
||||||
|
|
||||||
|
const float l = -width * 0.5f;
|
||||||
|
const float r = width * 0.5f;
|
||||||
|
const float b = -height * 0.5f;
|
||||||
|
const float t = height * 0.5f;
|
||||||
|
const float n = nearPlane;
|
||||||
|
const float f = farPlane;
|
||||||
|
const float length = n - f;
|
||||||
|
|
||||||
|
return Matrix4x4(
|
||||||
|
2.0f / width, 0, 0, -(r + l) / (r - l) + 1,
|
||||||
|
0, 2.0f / height, 0, -(t + b) / (t - b) + 1,
|
||||||
|
0, 0, 2.0f / length, -(n + f) / (n - f) + 1,
|
||||||
|
0, 0, 0, 1
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -38,6 +38,8 @@ namespace Scene
|
||||||
|
|
||||||
Math::Matrix4x4 get_view_matrix() const;
|
Math::Matrix4x4 get_view_matrix() const;
|
||||||
|
|
||||||
Math::Matrix4x4 get_projection_matrix(float aspectRatio) const;
|
Math::Matrix4x4 get_orthographic_projection_matrix(float aspectRatio) const;
|
||||||
|
|
||||||
|
Math::Matrix4x4 get_perspective_projection_matrix(float width, float height) const;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue