fix: 修改默认相机为正交相机

master
tongg 5 months ago
parent 7f7e5425cc
commit 0904710581
  1. 9
      Views/UserControl/Viewport3D.xaml.cs
  2. 10
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs

@ -32,6 +32,7 @@ public partial class Viewport3D
Viewport3Dx.ShowViewCube = false;
Viewport3Dx.ShowCoordinateSystem = false;
ViewportManager.SetViewport3D(Viewport3Dx);
}
/// <summary>
@ -129,7 +130,7 @@ public partial class Viewport3D
var maxDimension = ViewportManager.ModelBounds.Size.Length();
var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内
// 获取当前相机
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera;
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
switch (directionName)
{
@ -187,7 +188,7 @@ public partial class Viewport3D
var center = ViewportManager.ModelBounds.Center;
var maxDimension = ViewportManager.ModelBounds.Size.Length();
var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera;
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
camera.Position = new Point3D(center.X, center.Y, center.Z + distance); // 从前面看,Z轴正方向
camera.UpDirection = new Vector3D(0, -1, 0);
camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z);
@ -211,7 +212,7 @@ public partial class Viewport3D
var directionValue = (int)TbCustomizeRevolve.Value; // 旋转角度(单位:度)
// 获取当前相机和模型中心
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera;
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
if (camera == null) return;
var modelCenter = ViewportManager.CenterVector; // 模型中心
@ -417,7 +418,7 @@ public partial class Viewport3D
var maxDimension = ViewportManager.ModelBounds.Size.Length();
var distance = maxDimension * 1.2; // 调整相机到模型的距离,保证视野范围内
// 获取当前相机
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera;
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
camera.Position = new Point3D(center.X, center.Y - distance, center.Z); // 从底部看,Y轴负方向
camera.UpDirection = new Vector3D(0, 0, -1);
camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z);

@ -19,6 +19,7 @@ using PerspectiveCamera = HelixToolkit.Wpf.SharpDX.PerspectiveCamera;
using System.Windows.Controls;
using HelixToolkit.Wpf;
using MeshBuilder = HelixToolkit.Wpf.SharpDX.MeshBuilder;
using OrthographicCamera = HelixToolkit.Wpf.SharpDX.OrthographicCamera;
namespace SparkClient.Views.UserControl.ViewportData.Helper;
@ -1010,7 +1011,7 @@ public class ViewportHelperPro
/// <param name="fieldOfView"></param>
/// <param name="aspectRatio"></param>
/// <returns></returns>
public static HelixToolkit.Wpf.SharpDX.PerspectiveCamera CalculateCamera(Vector3 positiveDirection, BoundingBox boundingBox, double fieldOfView = 45, double aspectRatio = 16.0 / 9.0)
public static HelixToolkit.Wpf.SharpDX.OrthographicCamera CalculateCamera(Vector3 positiveDirection, BoundingBox boundingBox, double fieldOfView = 45, double aspectRatio = 16.0 / 9.0)
{
// 单位化正方向
var normalizedDirection = Vector3.Normalize(positiveDirection);
@ -1031,12 +1032,13 @@ public class ViewportHelperPro
// 创建并返回相机
return new HelixToolkit.Wpf.SharpDX.PerspectiveCamera
return new HelixToolkit.Wpf.SharpDX.OrthographicCamera
{
Position = cameraPosition.ToPoint3D(),
LookDirection = lookDirection.ToVector3D(),
UpDirection = new Vector3D(0, 1, 0), // 默认全局 Y 轴为上方向
FieldOfView = fieldOfView,
NearPlaneDistance = 0.1f,
FarPlaneDistance=1000
};
}
@ -1446,7 +1448,7 @@ public class ViewportHelperPro
{
// 使用 HelixToolkit 的 Ray3D 和 Plane3D
var Viewport = ViewportManager.GetViewport3D();
var camera = Viewport.Camera as PerspectiveCamera;
var camera = Viewport.Camera as OrthographicCamera;
// 创建射线
var ray = new Ray3D(

Loading…
Cancel
Save