Скрытый текст:
Собсно проблема хорошо видна на видео. Такое происходит, если менять проекцию камеры, которую я вероятно неправильно и рассчитываю.. Чтобы не было этого, надо отдалять от стены плашку портала минимум 0.04 от стены, на мобиле на 0.05. Соответственно вблизи видно, что портал в воздухе висит, что не красиво..
Код для проекции камер портала:
Синтаксис:
Используется csharp
Vector3 pos = targetPortal.transform.position; // позиция плоскости другого портала
Vector3 normal = targetPortal.transform.forward; // позиция плоскости другого портала
Vector4 clipPlane = PortalUtils.CameraSpacePlane(Cams[i], pos, normal, ClipPlaneOffset, 1.0f);
Matrix4x4 projection = CameraDefault.CalculateObliqueMatrix(clipPlane); // CameraDefault это не используемая камера, с которой только берется базовая проекция, если этого не делать, а брать непосредственно у Cams[i], то через какое-то время там вообще хаос может случиться, все съезжает куда-то
Cams[i].projectionMatrix = projection;
public static Vector4 CameraSpacePlane(Camera cam, Vector3 pos, Vector3 normal, float ClipPlaneOffset, float sideSign)
{
Vector3 offsetPos = pos + (normal * ClipPlaneOffset);
Matrix4x4 m = cam.worldToCameraMatrix;
Vector3 cpos = m.MultiplyPoint(offsetPos);
Vector3 cnormal = m.MultiplyVector(-normal) * sideSign;
return new Vector4(cnormal.x, cnormal.y, cnormal.z, Vector3.Dot(-cpos, cnormal));
}
Vector3 normal = targetPortal.transform.forward; // позиция плоскости другого портала
Vector4 clipPlane = PortalUtils.CameraSpacePlane(Cams[i], pos, normal, ClipPlaneOffset, 1.0f);
Matrix4x4 projection = CameraDefault.CalculateObliqueMatrix(clipPlane); // CameraDefault это не используемая камера, с которой только берется базовая проекция, если этого не делать, а брать непосредственно у Cams[i], то через какое-то время там вообще хаос может случиться, все съезжает куда-то
Cams[i].projectionMatrix = projection;
public static Vector4 CameraSpacePlane(Camera cam, Vector3 pos, Vector3 normal, float ClipPlaneOffset, float sideSign)
{
Vector3 offsetPos = pos + (normal * ClipPlaneOffset);
Matrix4x4 m = cam.worldToCameraMatrix;
Vector3 cpos = m.MultiplyPoint(offsetPos);
Vector3 cnormal = m.MultiplyVector(-normal) * sideSign;
return new Vector4(cnormal.x, cnormal.y, cnormal.z, Vector3.Dot(-cpos, cnormal));
}
Вот что ей надо? Выручайте