|
|
@@ -63,7 +63,7 @@ namespace SharpGLTF.Schema2
|
|
|
/// <param name="zfar">Distance to the far plane in the Z axis.</param>
|
|
|
public void SetOrthographicMode(float xmag, float ymag, float znear, float zfar)
|
|
|
{
|
|
|
- CameraOrthographic.CheckParameters(xmag, ymag, znear, zfar);
|
|
|
+ CameraOrthographic.VerifyParameters(xmag, ymag, znear, zfar);
|
|
|
|
|
|
this._perspective = null;
|
|
|
this._orthographic = new CameraOrthographic(xmag, ymag, znear, zfar);
|
|
|
@@ -80,7 +80,7 @@ namespace SharpGLTF.Schema2
|
|
|
/// <param name="zfar">Distance to the far plane in the Z axis.</param>
|
|
|
public void SetPerspectiveMode(float? aspectRatio, float yfov, float znear, float zfar)
|
|
|
{
|
|
|
- CameraPerspective.CheckParameters(aspectRatio, yfov, znear, zfar);
|
|
|
+ CameraPerspective.VerifyParameters(aspectRatio, yfov, znear, zfar);
|
|
|
|
|
|
this._orthographic = null;
|
|
|
this._perspective = new CameraPerspective(aspectRatio, yfov, znear, zfar);
|
|
|
@@ -94,15 +94,19 @@ namespace SharpGLTF.Schema2
|
|
|
|
|
|
protected override void OnValidateReferences(Validation.ValidationContext validate)
|
|
|
{
|
|
|
- base.OnValidateReferences(validate);
|
|
|
-
|
|
|
- if (_orthographic == null && _perspective == null) validate._LinkThrow("perspective", "Missing orthographic or perspective");
|
|
|
+ if (_type == CameraType.perspective)
|
|
|
+ {
|
|
|
+ validate.IsDefined("perspective", _perspective);
|
|
|
+ validate.IsUndefined("orthographic", _orthographic);
|
|
|
+ }
|
|
|
|
|
|
- if (_orthographic != null && _perspective != null)
|
|
|
+ if (_type == CameraType.orthographic)
|
|
|
{
|
|
|
- if (validate.TryFix) _orthographic = null;
|
|
|
- else validate._LinkThrow("perspective", "orthographic and perspective are mutually exclusive");
|
|
|
+ validate.IsUndefined("perspective", _perspective);
|
|
|
+ validate.IsDefined("orthographic", _orthographic);
|
|
|
}
|
|
|
+
|
|
|
+ base.OnValidateReferences(validate);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
@@ -171,15 +175,16 @@ namespace SharpGLTF.Schema2
|
|
|
|
|
|
#region API
|
|
|
|
|
|
- public static void CheckParameters(float xmag, float ymag, float znear, float zfar)
|
|
|
+ public static void VerifyParameters(float xmag, float ymag, float znear, float zfar)
|
|
|
{
|
|
|
- Guard.MustBeGreaterThan(xmag, 0, nameof(xmag));
|
|
|
- Guard.MustBeGreaterThan(ymag, 0, nameof(ymag));
|
|
|
-
|
|
|
- Guard.MustBeGreaterThanOrEqualTo(znear, 0, nameof(znear));
|
|
|
- Guard.MustBeGreaterThanOrEqualTo(zfar, 0, nameof(zfar));
|
|
|
+ Guard.MustBeGreaterThanOrEqualTo(znear, (float)_znearMinimum, nameof(znear));
|
|
|
+ Guard.MustBeGreaterThanOrEqualTo(zfar, (float)_zfarMinimum, nameof(zfar));
|
|
|
Guard.MustBeGreaterThan(zfar, znear, nameof(zfar));
|
|
|
Guard.MustBeLessThan(zfar, float.PositiveInfinity, nameof(zfar));
|
|
|
+
|
|
|
+ // these are considered warnings
|
|
|
+ // Guard.MustBeGreaterThan(xmag, 0, nameof(xmag));
|
|
|
+ // Guard.MustBeGreaterThan(ymag, 0, nameof(ymag));
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
@@ -188,9 +193,9 @@ namespace SharpGLTF.Schema2
|
|
|
|
|
|
protected override void OnValidateContent(Validation.ValidationContext validate)
|
|
|
{
|
|
|
- base.OnValidateContent(validate);
|
|
|
+ validate.That(() => VerifyParameters(this.XMag, this.YMag, this.ZNear, this.ZFar));
|
|
|
|
|
|
- validate.IsGreater(nameof(ZFar), ZFar, ZNear); // "ZFar must be greater than ZNear");
|
|
|
+ base.OnValidateContent(validate);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
@@ -205,7 +210,7 @@ namespace SharpGLTF.Schema2
|
|
|
|
|
|
internal CameraPerspective(float? aspectRatio, float yfov, float znear, float zfar)
|
|
|
{
|
|
|
- CheckParameters(aspectRatio, yfov, znear, zfar);
|
|
|
+ VerifyParameters(aspectRatio, yfov, znear, zfar);
|
|
|
|
|
|
this._aspectRatio = aspectRatio ?? null;
|
|
|
this._yfov = yfov;
|
|
|
@@ -253,14 +258,14 @@ namespace SharpGLTF.Schema2
|
|
|
|
|
|
#region API
|
|
|
|
|
|
- public static void CheckParameters(float? aspectRatio, float yfov, float znear, float zfar = float.PositiveInfinity)
|
|
|
+ public static void VerifyParameters(float? aspectRatio, float yfov, float znear, float zfar = float.PositiveInfinity)
|
|
|
{
|
|
|
- if (aspectRatio.HasValue) Guard.MustBeGreaterThanOrEqualTo(aspectRatio.Value, 0, nameof(aspectRatio));
|
|
|
- Guard.MustBeGreaterThan(yfov, 0, nameof(yfov));
|
|
|
- Guard.MustBeLessThan(yfov, (float)Math.PI, nameof(yfov));
|
|
|
+ Guard.MustBeGreaterThanOrEqualTo(aspectRatio.AsValue(1), (float)_aspectRatioMinimum, nameof(aspectRatio));
|
|
|
+ Guard.MustBeGreaterThan(yfov, (float)_yfovMinimum, nameof(yfov));
|
|
|
+ // Guard.MustBeLessThan(yfov, (float)Math.PI, nameof(yfov));
|
|
|
|
|
|
- Guard.MustBeGreaterThanOrEqualTo(znear, 0, nameof(znear));
|
|
|
- Guard.MustBeGreaterThanOrEqualTo(zfar, 0, nameof(zfar));
|
|
|
+ Guard.MustBeGreaterThanOrEqualTo(znear, (float)_znearMinimum, nameof(znear));
|
|
|
+ Guard.MustBeGreaterThanOrEqualTo(zfar, (float)_zfarMinimum, nameof(zfar));
|
|
|
Guard.MustBeGreaterThan(zfar, znear, nameof(zfar));
|
|
|
}
|
|
|
|
|
|
@@ -270,9 +275,9 @@ namespace SharpGLTF.Schema2
|
|
|
|
|
|
protected override void OnValidateContent(Validation.ValidationContext validate)
|
|
|
{
|
|
|
- base.OnValidateContent(validate);
|
|
|
+ validate.That(() => VerifyParameters(this.AspectRatio, this.VerticalFOV, this.ZNear, this.ZFar));
|
|
|
|
|
|
- validate.IsGreater(nameof(ZFar), ZFar, ZNear); // "ZFar must be greater than ZNear");
|
|
|
+ base.OnValidateContent(validate);
|
|
|
}
|
|
|
|
|
|
#endregion
|