WPF 3D 相机 FieldOfView 参数和其他参数学习

(5) 2024-06-26 11:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
WPF 3D 相机 FieldOfView 参数和其他参数学习,希望能够帮助你!!!。

1 FieldOfView参数

wpf 3d 相机还有一个视场角参数,FieldOfView;

视场角定义如下,

视场角在光学工程中又称视场,视场角的大小决定了光学仪器的视野范围,视场角又可用FOV表示;

在光学仪器中,以光学仪器的镜头为顶点,以被测目标的物像可通过镜头的最大范围的两条边缘构成的夹角,称为视场角; 
视场角的大小决定了光学仪器的视野范围,视场角越大,视野就越大,光学倍率就越小;通俗地说,目标物体超过这个角就不会被收在镜头里;

做一个立方体,只能看到正面;

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <Viewport3D Margin="10"> <Viewport3D.Camera> <PerspectiveCamera Position="0,1,18" FieldOfView="30" x:Name="camera"></PerspectiveCamera> </Viewport3D.Camera> <Viewport3D.Children> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup > <GeometryModel3D x:Name="F1"> <GeometryModel3D.Material> <DiffuseMaterial Brush="Green"/> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="0,0,0 2,0,0 2,2,0 0,2,0" TriangleIndices="0,2,1 0,3,2"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <GeometryModel3D x:Name="F2"> <GeometryModel3D.Material> <DiffuseMaterial Brush="Blue"/> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="0,0,0 0,0,2 0,2,2 0,2,0" TriangleIndices="0,1,2 0,2,3"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <GeometryModel3D x:Name="F3"> <GeometryModel3D.Material> <DiffuseMaterial Brush="Gray"/> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="0,0,0 0,0,2 2,0,2 2,0,0" TriangleIndices="0,2,1 0,3,2"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <GeometryModel3D x:Name="F4"> <GeometryModel3D.Material> <DiffuseMaterial Brush="Bisque"/> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="2,0,0 2,2,0 2,2,2 2,0,2" TriangleIndices="0,1,2 0,2,3"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <GeometryModel3D x:Name="F5"> <GeometryModel3D.Material> <DiffuseMaterial Brush="Yellow"/> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="0,2,2 2,2,2 2,2,0 0,2,0" TriangleIndices="0,1,2 0,2,3"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <GeometryModel3D x:Name="F6"> <GeometryModel3D.Material> <DiffuseMaterial Brush="Red"/> </GeometryModel3D.Material> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="0,2,2 2,2,2 0,0,2 2,0,2" TriangleIndices="0,2,3 0,3,1"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> </Model3DGroup> </ModelVisual3D.Content> </ModelVisual3D> <ModelVisual3D x:Name="light"> <ModelVisual3D.Content> <AmbientLight></AmbientLight> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D.Children> </Viewport3D> </Grid> </Page>

调整视场角为不同值时情况如下;

WPF 3D 相机 FieldOfView 参数和其他参数学习_https://bianchenghao6.com/blog__第1张
 

WPF 3D 相机 FieldOfView 参数和其他参数学习_https://bianchenghao6.com/blog__第2张

 WPF 3D 相机 FieldOfView 参数和其他参数学习_https://bianchenghao6.com/blog__第3张

     我还不太理解此参数;看上去值小时物体就大;

2 NearPlaneDistance 和 FarPlaneDistance属性

    NearPlaneDistance 和 FarPlaneDistance 属性限制照相机的投影范围。
    照相机可以位于场景中的任何位置,也可能会位于模型内部或者紧靠模型。
    通过 NearPlaneDistance,可以指定一个距离照相机的最小距离,超过该距离后即不绘制对象。
    相反,使用 FarPlaneDistance,可以指定一个距离照相机的距离(即,在超过该距离后将不绘制对象),从而确保因距离太远而无法识别的对象将不包括在场景中。

上面代码加上 NearPlaneDistance ,值为5、8、15的时候物体大小都一样,值为20则看不到物体;

FarPlaneDistance为30、300时物体大小一样,为5时没有物体;

3 调整视场角查看模型

通过上面已知视场角是2条射线之间的一个夹角;越小,看到的物体越大;下面看一下调整视场角看到的模型的情况;

WPF 3D 相机 FieldOfView 参数和其他参数学习_https://bianchenghao6.com/blog__第4张

WPF 3D 相机 FieldOfView 参数和其他参数学习_https://bianchenghao6.com/blog__第5张 

WPF 3D 相机 FieldOfView 参数和其他参数学习_https://bianchenghao6.com/blog__第6张 

20看到就很大了; 

WPF 3D 相机 FieldOfView 参数和其他参数学习_https://bianchenghao6.com/blog__第7张 

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复