Added Camera LookAt and CameraArmComponent works now
This commit is contained in:
parent
0e2b017716
commit
65013969a8
|
@ -182,7 +182,9 @@ namespace SHADE
|
|||
camera.offset = SHVec3{ 0.0f };
|
||||
if (SHComponentManager::HasComponent<SHCameraArmComponent>(camera.GetEID()))
|
||||
{
|
||||
camera.offset = SHComponentManager::GetComponent<SHCameraArmComponent>(camera.GetEID())->GetOffset();
|
||||
auto arm = SHComponentManager::GetComponent<SHCameraArmComponent>(camera.GetEID());
|
||||
camera.offset = arm->GetOffset();
|
||||
CameraLookAt(camera, camera.position);
|
||||
}
|
||||
|
||||
SHVec3 view, right, UP;
|
||||
|
@ -257,12 +259,7 @@ namespace SHADE
|
|||
SHVec3 target{ 0.0f,0.0f,-1.0f };
|
||||
SHVec3 up = { 0.0f,1.0f,0.0f };
|
||||
|
||||
if (SHComponentManager::HasComponent<SHCameraArmComponent>(camera.GetEID()))
|
||||
{
|
||||
auto arm = SHComponentManager::GetComponent<SHCameraArmComponent>(camera.GetEID());
|
||||
target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch + arm->GetPitch()));
|
||||
target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw + arm->GetYaw()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch));
|
||||
|
@ -387,4 +384,53 @@ namespace SHADE
|
|||
DecomposeViewMatrix(viewMatrix, camera.pitch, camera.yaw, camera.roll, camera.position);
|
||||
camera.dirtyView = true;
|
||||
}
|
||||
|
||||
void SHCameraSystem::CameraLookAt(SHCameraComponent& camera, SHVec3 target) noexcept
|
||||
{
|
||||
|
||||
if (camera.position == target)
|
||||
{
|
||||
//lets off set it abit so the view is nt fked
|
||||
target.z -= 0.0001f;
|
||||
}
|
||||
SHVec3 forward, right, upVec;
|
||||
|
||||
SHVec3 up = { 0.0f,1.0f,0.0f };
|
||||
|
||||
|
||||
////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll));
|
||||
|
||||
//target = SHVec3::Normalise(target);
|
||||
|
||||
SHVec3::RotateZ(up, camera.roll);
|
||||
up = SHVec3::Normalise(up);
|
||||
|
||||
|
||||
forward = target - (camera.position + camera.offset); forward = SHVec3::Normalise(forward);
|
||||
right = SHVec3::Cross(forward, up); right = SHVec3::Normalise(right);
|
||||
upVec = SHVec3::Cross(forward, right);
|
||||
|
||||
|
||||
SHMatrix viewMtx;
|
||||
viewMtx = SHMatrix::Identity;
|
||||
viewMtx(0, 0) = right[0];
|
||||
viewMtx(0, 1) = right[1];
|
||||
viewMtx(0, 2) = right[2];
|
||||
|
||||
viewMtx(1, 0) = upVec[0];
|
||||
viewMtx(1, 1) = upVec[1];
|
||||
viewMtx(1, 2) = upVec[2];
|
||||
|
||||
viewMtx(2, 0) = forward[0];
|
||||
viewMtx(2, 1) = forward[1];
|
||||
viewMtx(2, 2) = forward[2];
|
||||
|
||||
viewMtx(0, 3) = -right.Dot(camera.position + camera.offset);
|
||||
viewMtx(1, 3) = -upVec.Dot(camera.position + camera.offset);
|
||||
viewMtx(2, 3) = -forward.Dot(camera.position + camera.offset);
|
||||
|
||||
|
||||
SetCameraViewMatrix(camera, viewMtx);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ namespace SHADE
|
|||
void SetMainCamera(EntityID eid, size_t directorIndex) noexcept;
|
||||
void DecomposeViewMatrix(SHMatrix const& matrix, float& pitch, float& yaw, float& roll, SHVec3& pos) noexcept;
|
||||
void SetCameraViewMatrix(SHCameraComponent& camera, SHMatrix const& viewMatrix) noexcept;
|
||||
|
||||
void CameraLookAt(SHCameraComponent& camera, SHVec3 target) noexcept;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue