39 lines
1.5 KiB
C#
39 lines
1.5 KiB
C#
|
using System;
|
||
|
|
||
|
namespace UnityEngine.Experimental.Rendering
|
||
|
{
|
||
|
internal readonly struct XRView
|
||
|
{
|
||
|
internal readonly Matrix4x4 projMatrix;
|
||
|
internal readonly Matrix4x4 viewMatrix;
|
||
|
internal readonly Matrix4x4 prevViewMatrix;
|
||
|
internal readonly Rect viewport;
|
||
|
internal readonly Mesh occlusionMesh;
|
||
|
internal readonly int textureArraySlice;
|
||
|
internal readonly Vector2 eyeCenterUV;
|
||
|
internal readonly bool isPrevViewMatrixValid;
|
||
|
|
||
|
internal XRView(Matrix4x4 projMatrix, Matrix4x4 viewMatrix, Matrix4x4 prevViewMatrix, bool isPrevViewMatrixValid, Rect viewport, Mesh occlusionMesh, int textureArraySlice)
|
||
|
{
|
||
|
this.projMatrix = projMatrix;
|
||
|
this.viewMatrix = viewMatrix;
|
||
|
this.prevViewMatrix = prevViewMatrix;
|
||
|
this.viewport = viewport;
|
||
|
this.occlusionMesh = occlusionMesh;
|
||
|
this.textureArraySlice = textureArraySlice;
|
||
|
this.isPrevViewMatrixValid = isPrevViewMatrixValid;
|
||
|
eyeCenterUV = ComputeEyeCenterUV(projMatrix);
|
||
|
}
|
||
|
|
||
|
private static Vector2 ComputeEyeCenterUV(Matrix4x4 proj)
|
||
|
{
|
||
|
var projectionParameters = proj.decomposeProjection;
|
||
|
float left = Math.Abs(projectionParameters.left);
|
||
|
float right = Math.Abs(projectionParameters.right);
|
||
|
float top = Math.Abs(projectionParameters.top);
|
||
|
float bottom = Math.Abs(projectionParameters.bottom);
|
||
|
return new Vector2(left / (right + left), top / (top + bottom));
|
||
|
}
|
||
|
}
|
||
|
}
|