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; }
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; }