Files
AR-Menu/Library/PackageCache/org.khronos.unitygltf@6b55d14e19c1/Runtime/Plugins/GLTFSerialization/Schema/CameraPerspective.cs
2025-11-30 08:35:03 +02:00

117 lines
2.8 KiB
C#

using System;
using Newtonsoft.Json;
namespace GLTF.Schema
{
/// <summary>
/// A perspective camera containing properties to create a perspective projection
/// matrix.
/// </summary>
public class CameraPerspective : GLTFProperty
{
/// <summary>
/// The floating-point aspect ratio of the field of view.
/// When this is undefined, the aspect ratio of the canvas is used.
/// <minimum>0.0</minimum>
/// </summary>
public double AspectRatio;
/// <summary>
/// The floating-point vertical field of view in radians.
/// <minimum>0.0</minimum>
/// </summary>
public double YFov;
/// <summary>
/// The floating-point distance to the far clipping plane. When defined,
/// `zfar` must be greater than `znear`.
/// If `zfar` is undefined, runtime must use infinite projection matrix.
/// <minimum>0.0</minimum>
/// </summary>
public double ZFar = double.PositiveInfinity;
/// <summary>
/// The floating-point distance to the near clipping plane.
/// <minimum>0.0</minimum>
/// </summary>
public double ZNear;
public CameraPerspective()
{
}
public CameraPerspective(CameraPerspective cameraPerspective) : base(cameraPerspective)
{
if (cameraPerspective == null) return;
AspectRatio = cameraPerspective.AspectRatio;
YFov = cameraPerspective.YFov;
ZFar = cameraPerspective.ZFar;
ZNear = cameraPerspective.ZNear;
}
public static CameraPerspective Deserialize(GLTFRoot root, JsonReader reader)
{
var cameraPerspective = new CameraPerspective();
if (reader.Read() && reader.TokenType != JsonToken.StartObject)
{
throw new Exception("Perspective camera must be an object.");
}
while (reader.Read() && reader.TokenType == JsonToken.PropertyName)
{
var curProp = reader.Value.ToString();
switch (curProp)
{
case "aspectRatio":
cameraPerspective.AspectRatio = reader.ReadAsDouble().Value;
break;
case "yfov":
cameraPerspective.YFov = reader.ReadAsDouble().Value;
break;
case "zfar":
cameraPerspective.ZFar = reader.ReadAsDouble().Value;
break;
case "znear":
cameraPerspective.ZNear = reader.ReadAsDouble().Value;
break;
default:
cameraPerspective.DefaultPropertyDeserializer(root, reader);
break;
}
}
return cameraPerspective;
}
public override void Serialize(JsonWriter writer)
{
writer.WriteStartObject();
if (AspectRatio != 0)
{
writer.WritePropertyName("aspectRatio");
writer.WriteValue(AspectRatio);
}
writer.WritePropertyName("yfov");
writer.WriteValue(YFov);
if (ZFar != double.PositiveInfinity)
{
writer.WritePropertyName("zfar");
writer.WriteValue(ZFar);
}
writer.WritePropertyName("znear");
writer.WriteValue(ZNear);
base.Serialize(writer);
writer.WriteEndObject();
}
}
}