public void TestZoom1_XOnly_ZDirection() { double aspectRatio = 1.0; double cameraDistanceOriginal = 1000; double zNear = 100; double zFar = 10000; double widthByZNear = 0.5; double distanceFactor = 0.75; PointD3D targetPosition = new PointD3D(0, 0, 0); VectorD3D targetToEye = new VectorD3D(0, 0, cameraDistanceOriginal); VectorD3D cameraUpVector = new VectorD3D(0, 1, 0); VectorD3D targetToWorldPoint = new VectorD3D(200, 0, 0); PointD3D cameraPosition = targetPosition + targetToEye; PointD3D worldPoint = targetPosition + targetToWorldPoint; Assert.AreEqual(0, VectorD3D.DotProduct(targetToEye, targetToWorldPoint), "The test must be set up in a way that targetToEye and targetToWorldPoint are perpendicular to each other"); var cameraO = new PerspectiveCamera(cameraUpVector, cameraPosition, targetPosition, zNear, zFar, widthByZNear * zNear); var screenO = cameraO.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); Assert.AreEqual(0.0, screenO.Y, "Test must be set up so that screen.Y is always zero"); var cameraN = cameraO.ZoomByGettingCloserToTarget(distanceFactor, screenO.X, screenO.Y, aspectRatio); var screenN = cameraN.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); Assert.AreEqual(screenO.X, screenN.X, 1E-3); Assert.AreEqual(screenO.Y, screenN.Y, 1E-3); }
public void TestZoom1_XOnly_XDirection() { double aspectRatio = 1.0; double cameraDistanceOriginal = 1000; double zNear = 100; double zFar = 10000; double widthByZNear = 0.5; double distanceFactor = 0.75; var targetPosition = new PointD3D(0, 0, 0); var targetToEye = new VectorD3D(cameraDistanceOriginal, 0, 0); var cameraUpVector = new VectorD3D(0, 0, 1); var targetToWorldPoint = new VectorD3D(0, 200, 0); PointD3D cameraPosition = targetPosition + targetToEye; PointD3D worldPoint = targetPosition + targetToWorldPoint; Assert.AreEqual(0, VectorD3D.DotProduct(targetToEye, targetToWorldPoint), "The test must be set up in a way that targetToEye and targetToWorldPoint are perpendicular to each other"); var cameraO = new PerspectiveCamera(cameraUpVector, cameraPosition, targetPosition, zNear, zFar, widthByZNear * zNear); var screenO = cameraO.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); Assert.AreEqual(0.0, screenO.Y, "Test must be set up so that screen.Y is always zero"); var cameraN = cameraO.ZoomByGettingCloserToTarget(distanceFactor, screenO.X, screenO.Y, aspectRatio); var screenN = cameraN.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); Assert.AreEqual(screenO.X, screenN.X, 1E-3); Assert.AreEqual(screenO.Y, screenN.Y, 1E-3); }
public void TestZoom1_XY() { double aspectRatio = 1.0; double cameraDistanceOriginal = 1000; double zNear = 100; double zFar = 10000; double widthByZNear = 0.5; double distanceFactor = 0.75; var cameraPosition = new PointD3D(0, 0, cameraDistanceOriginal); var targetPosition = new PointD3D(0, 0, 0); var worldPoint = new PointD3D(200, 200, 0); var cameraO = new PerspectiveCamera(new VectorD3D(0, 1, 0), cameraPosition, targetPosition, zNear, zFar, widthByZNear * zNear); var screenO = cameraO.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); var cameraN = cameraO.ZoomByGettingCloserToTarget(distanceFactor, screenO.X, screenO.Y, aspectRatio); var screenN = cameraN.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); Assert.AreEqual(screenO.X, screenN.X, 1E-3); Assert.AreEqual(screenO.Y, screenN.Y, 1E-3); }
public void TestZoom1_XY() { double aspectRatio = 1.0; double cameraDistanceOriginal = 1000; double zNear = 100; double zFar = 10000; double widthByZNear = 0.5; double distanceFactor = 0.75; PointD3D cameraPosition = new PointD3D(0, 0, cameraDistanceOriginal); PointD3D targetPosition = new PointD3D(0, 0, 0); PointD3D worldPoint = new PointD3D(200, 200, 0); var cameraO = new PerspectiveCamera(new VectorD3D(0, 1, 0), cameraPosition, targetPosition, zNear, zFar, widthByZNear * zNear); var screenO = cameraO.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); var cameraN = cameraO.ZoomByGettingCloserToTarget(distanceFactor, screenO.X, screenO.Y, aspectRatio); var screenN = cameraN.GetViewProjectionMatrix(aspectRatio).Transform(worldPoint); Assert.AreEqual(screenO.X, screenN.X, 1E-3); Assert.AreEqual(screenO.Y, screenN.Y, 1E-3); }