WPF 3D 基础学习 - 相机、裁剪、光线入门(2)
接
https://blog.csdn.net/bcbobo21cn/article/details/109697065
1 從坐標系看相機
從坐標系看一下相機;右手是X正向,Y正方向是向上;這是WPF;各種3D平臺的坐標系是否一樣不知道;
相機在 0 0 15;
如果相機上移,相機y坐標增大,看到的物體應朝下;如下;
?
? ? 前面兩個圖物體都下移了;?
如果相機右移,增大x坐標,圖形應右移;如下;
2 裁剪
概念圖如下;
Camera Space 相機空間
View Frustum??視錐體
Clip-Colume Space
剪裁空間(Clip Space)
?
視錐體(frustum)裁剪
視錐體(frustum),是指場景中攝像機的可見的一個錐體范圍。它有上、下、左、右、近、遠,共6個面組成。在視錐體內(nèi)的景物可見,反之則不可見。為提高性能,只對其中與視錐體有交集的對象進行繪制。
?ProjectionCamera 的 NearPlaneDistance 和 FarPlaneDistance 屬性限制照相機的投影范圍。由于照相機可以位于場景中的任何位置,因此照相機實際上可能會位于模型內(nèi)部或者緊靠模型,這使正確區(qū)分對象變得很困難。 通過 NearPlaneDistance,可以指定一個距離照相機的最小距離,超過該距離后即不繪制對象。 相反,使用 FarPlaneDistance,可以指定一個距離照相機的距離(即,在超過該距離后將不繪制對象),從而確保因距離太遠而無法識別的對象將不包括在場景中。
裁剪屬性的說明見此;
https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.media.media3d.viewport3dvisual.clip?view=net-5.0
Viewport3DVisual.Clip 屬性
初步使用一下裁剪相關屬性,代碼和效果如下;
3 光線入門
在前面,前一文的代碼中看到;畫刷一直都是紅色,<DiffuseMaterial Brush="Red"/>;但是繪制出的面都是黑色;為什么?
這是在3D場景中,光線默認為0;沒有光線,所以看到的任何都是黑色;
下面把畫刷改為綠色;再增加光線;如下一段;
? ? ? ? ? ? ? ? <ModelVisual3D x:Name="light">
? ? ? ? ? ? ? ? ? ? <ModelVisual3D.Content>
? ? ? ? ? ? ? ? ? ? ? ? <AmbientLight></AmbientLight>
? ? ? ? ? ? ? ? ? ? </ModelVisual3D.Content>
? ? ? ? ? ? ? ? </ModelVisual3D>
然后畫刷繪制的顏色出來了;
也可以設置光線的顏色;
<Pagexmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Grid> <Viewport3D><Viewport3D.Camera><PerspectiveCamera Position="5,1,15" x:Name="camera"></PerspectiveCamera></Viewport3D.Camera><Viewport3D.Children><ModelVisual3D><ModelVisual3D.Content><Model3DGroup ><GeometryModel3D><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,1,2 0,2,3"></MeshGeometry3D></GeometryModel3D.Geometry></GeometryModel3D></Model3DGroup></ModelVisual3D.Content> </ModelVisual3D> <ModelVisual3D x:Name="light"><ModelVisual3D.Content><AmbientLight Color="#007F7F7F"></AmbientLight></ModelVisual3D.Content></ModelVisual3D> </Viewport3D.Children></Viewport3D> </Grid> </Page>?
總結(jié)
以上是生活随笔為你收集整理的WPF 3D 基础学习 - 相机、裁剪、光线入门(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 3D基础学习 - 画布、相机、M
- 下一篇: 汇编语言int 13中断02h功能Dem