fixed cam distance

This commit is contained in:
2023-06-06 17:04:17 +02:00
parent 92035d7b9e
commit e984ed9085
3 changed files with 21 additions and 8 deletions

View File

@@ -35,9 +35,14 @@ Vec3<T> operator- (const Vec3<T>& vect, const Vec3<T>& other) {
return vect + (-other); return vect + (-other);
} }
template<typename T>
T Length(const Vec3<T>& vect) {
return std::sqrt(vect.x * vect.x + vect.y * vect.y + vect.z * vect.z);
}
template<typename T> template<typename T>
Vec3<T> Normalize(const Vec3<T>& vect) { Vec3<T> Normalize(const Vec3<T>& vect) {
T length = std::sqrt(vect.x * vect.x + vect.y * vect.y + vect.z * vect.z); T length = Length(vect);
return { vect.x / length, vect.y / length, vect.z / length }; return { vect.x / length, vect.y / length, vect.z / length };
} }
@@ -68,6 +73,11 @@ T Dot(const Vec4<T>& vect, const Vec4<T>& other) {
return vect.x * other.x + vect.y * other.y + vect.z * other.z + vect.w * other.w; return vect.x * other.x + vect.y * other.y + vect.z * other.z + vect.w * other.w;
} }
template<typename T>
T Distance(const Vec3<T>& vect, const Vec3<T>& other) {
return Length(vect - other);
}
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
// Matricies // // Matricies //
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////

View File

@@ -15,8 +15,8 @@ struct Camera {
Mat4f InvViewMatrix; Mat4f InvViewMatrix;
Mat4f InvProjectionMatrix; Mat4f InvProjectionMatrix;
Vec3f CamPos {0, 25, 0}; float CamDistance = 25.0f;
Vec3f CamPos {0, CamDistance, 0};
Vec2f CamLook {}; Vec2f CamLook {};
float m_Yaw = -3.141592653f / 2.0f; float m_Yaw = -3.141592653f / 2.0f;

View File

@@ -88,6 +88,7 @@ void Renderer::Resize(int width, int height) {
void Renderer::SetZoom(float zoom) { void Renderer::SetZoom(float zoom) {
m_Camera.CamPos.y = std::max(1.0f, m_Camera.CamPos.y - zoom); m_Camera.CamPos.y = std::max(1.0f, m_Camera.CamPos.y - zoom);
m_Camera.CamDistance = std::max(1.0f, m_Camera.CamDistance - zoom);
SetCamLook(m_Camera.CamLook); SetCamLook(m_Camera.CamLook);
} }
@@ -116,6 +117,8 @@ void Renderer::SetCamPos(const Vec3f& newPos) {
} }
void Renderer::SetCamLook(const Vec2f& worldPos) { void Renderer::SetCamLook(const Vec2f& worldPos) {
static const float WORLD_HEIGHT = 0;
m_Camera.CamLook = worldPos; m_Camera.CamLook = worldPos;
Vec3f front = { Vec3f front = {
@@ -124,11 +127,11 @@ void Renderer::SetCamLook(const Vec2f& worldPos) {
std::sin(m_Camera.m_Yaw) * std::cos(m_Camera.m_Pitch) std::sin(m_Camera.m_Yaw) * std::cos(m_Camera.m_Pitch)
}; };
static const float WORLD_HEIGHT = 0; SetCamPos({
-m_Camera.CamDistance * front.x + m_Camera.CamLook.x,
float lambda = (m_Camera.CamPos.y - WORLD_HEIGHT) / front.y; -m_Camera.CamDistance * front.y + WORLD_HEIGHT,
-m_Camera.CamDistance * front.z + m_Camera.CamLook.y
SetCamPos({lambda * front.x + m_Camera.CamLook.x, m_Camera.CamPos.y, lambda * front.z + m_Camera.CamLook.y}); });
} }
Vec2f Renderer::GetCursorWorldPos(const Vec2f& cursorPos, float windowWidth, float windowHeight) { Vec2f Renderer::GetCursorWorldPos(const Vec2f& cursorPos, float windowWidth, float windowHeight) {