void InitCamera()
        {
            var camera       = Scene.CameraEditor.Value;
            var bounds       = ObjectInSpace.SpaceBounds.CalculatedBoundingBox;
            var cameraLookTo = bounds.GetCenter();

            double maxGararite = Math.Max(Math.Max(bounds.GetSize().X, bounds.GetSize().Y), bounds.GetSize().Z);
            double distance    = maxGararite * 2;

            if (distance < 2)
            {
                distance = 2;
            }

            double             cameraZoomFactor = 1;
            SphericalDirection cameraDirection  = new SphericalDirection(-3.83, -.47);

            var cameraPosition = cameraLookTo - cameraDirection.GetVector() * distance * cameraZoomFactor;
            var center         = cameraLookTo;

            Vector3 from = cameraPosition;
            Vector3 to   = center;
            Degree  fov  = 65;

            camera.FieldOfView   = fov;
            camera.NearClipPlane = Math.Max(distance / 10000, 0.01);
            camera.FarClipPlane  = Math.Max(1000, distance * 2);

            camera.Transform = new Transform(from, Quaternion.LookAt((to - from).GetNormalize(), Vector3.ZAxis));
            camera.FixedUp   = Vector3.ZAxis;
        }
Beispiel #2
0
        void InitCamera(double distanceScale = 1)
        {
            var camera       = Scene.CameraEditor.Value;
            var bounds       = Scene.CalculateTotalBoundsOfObjectsInSpace();
            var cameraLookTo = bounds.GetCenter();

            double maxGararite = Math.Max(Math.Max(bounds.GetSize().X, bounds.GetSize().Y), bounds.GetSize().Z);
            double distance    = maxGararite * 2 * distanceScale;         // 2.3;

            if (distance < 2)
            {
                distance = 2;
            }

            double             cameraZoomFactor = 1;
            SphericalDirection cameraDirection  = new SphericalDirection(-3.83, -.47);

            var cameraPosition = cameraLookTo - cameraDirection.GetVector() * distance * cameraZoomFactor;
            var center         = cameraLookTo; // GetSceneCenter();

            Vector3 from = cameraPosition;     //center + cameraDirection.GetVector() * cameraDistance;
            Vector3 to   = center;
            Degree  fov  = 65;                 // 75;

            //!!!!
            //camera.AspectRatio = (double)ViewportControl.Viewport.SizeInPixels.X / (double)ViewportControl.Viewport.SizeInPixels.Y;
            camera.FieldOfView   = fov;
            camera.NearClipPlane = Math.Max(distance / 10000, 0.01);              //.1;
            camera.FarClipPlane  = Math.Max(1000, distance * 2);

            camera.Transform = new Transform(from, Quaternion.LookAt((to - from).GetNormalize(), Vector3.ZAxis));
            camera.FixedUp   = Vector3.ZAxis;
        }
        //public Vec3 GetSceneCenter()
        //{
        //	if( scene != null )
        //	{
        //		var bounds = scene.CalculateTotalBoundsOfObjectsInSpace();
        //		return bounds.GetCenter();
        //	}
        //	return Vec3.Zero;
        //}

        protected virtual void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            if (!cameraMode2D)
            {
                var cameraPosition = cameraLookTo - cameraDirection.GetVector() * cameraInitialDistance * cameraZoomFactor;
                var center         = cameraLookTo; // GetSceneCenter();

                Vector3 from = cameraPosition;     //center + cameraDirection.GetVector() * cameraDistance;
                Vector3 to   = center;
                Degree  fov  = 65;                 // 75;

                //!!!!
                Component_Camera camera = new Component_Camera();
                camera.AspectRatio   = (double)viewport.SizeInPixels.X / (double)viewport.SizeInPixels.Y;
                camera.FieldOfView   = fov;
                camera.NearClipPlane = Math.Max(cameraInitialDistance / 10000, 0.01);                  //.1;
                camera.FarClipPlane  = Math.Max(1000, cameraInitialDistance * 2);

                camera.Transform = new Transform(from, Quaternion.LookAt((to - from).GetNormalize(), Vector3.ZAxis));
                //camera.Position = from;
                //camera.Direction = ( to - from ).GetNormalize();

                camera.FixedUp          = Vector3.ZAxis;
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, camera);

                ////!!!!в методе больше параметров
                //double aspect = (double)viewport.SizeInPixels.X / (double)viewport.SizeInPixels.Y;
                //var settings = new Viewport.CameraSettingsClass( viewport, aspect, fov, .1f, 1000, from, ( to - from ).GetNormalize(), Vec3.ZAxis );
                //viewport.CameraSettings = settings;
            }
            else
            {
                var from = cameraLookTo + new Vector3(0, 0, scene.CameraEditor2DPositionZ);
                var to   = cameraLookTo;

                Component_Camera camera = new Component_Camera();
                camera.AspectRatio   = (double)viewport.SizeInPixels.X / (double)viewport.SizeInPixels.Y;
                camera.NearClipPlane = 0.01;               // Math.Max( cameraInitialDistance / 10000, 0.01 );//.1;
                camera.FarClipPlane  = 1000;               // Math.Max( 1000, cameraInitialDistance * 2 );
                camera.Transform     = new Transform(from, Quaternion.LookAt((to - from).GetNormalize(), Vector3.YAxis));
                camera.Projection    = ProjectionType.Orthographic;
                camera.FixedUp       = Vector3.YAxis;
                //!!!!need consider size by X
                camera.Height = cameraInitBounds.GetSize().Y * 1.4;

                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, camera);
            }

            processed = true;
        }