使用WPF實現3D場景[一]
阿新 • • 發佈:2018-10-22
建立 release http fuse 就是 eat solid width 源代碼 原文:使用WPF實現3D場景[一]
</Viewport3D>
????????<PerspectiveCamera?FarPlaneDistance="3000"?NearPlaneDistance="0.25"?FieldOfView="90"?Position="1800,0,0"?LookDirection="-1,0,0"?UpDirection="0,1,0"></PerspectiveCamera>
??????</Viewport3D.Camera>
????????<ModelVisual3D.Children>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<DirectionalLight?Color="#FFFFFFFF"?Direction ="-3,-4,-5"?/>
????????????</ModelVisual3D.Content>
??????????</ModelVisual3D>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<GeometryModel3D?Geometry="{StaticResource?chair}">
????????????????<GeometryModel3D.Material>
??????????????????<DiffuseMaterial>
????????????????????<DiffuseMaterial.Brush>
??????????????????????<SolidColorBrush?Color="Yellow"?Opacity="1.0"?/>
????????????????????</DiffuseMaterial.Brush>
??????????????????</DiffuseMaterial>
????????????????</GeometryModel3D.Material>
????????????????<GeometryModel3D.Transform>
??????????????????<TranslateTransform3D?OffsetX="0"?OffsetY="-200"?OffsetZ="-600"?/>
????????????????</GeometryModel3D.Transform>
??????????????</GeometryModel3D>
????????????</ModelVisual3D.Content>
??????????</ModelVisual3D>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<GeometryModel3D?Geometry="{StaticResource?table}">
????????????????<GeometryModel3D.Material>
??????????????????<DiffuseMaterial>
????????????????????<DiffuseMaterial.Brush>
??????????????????????<SolidColorBrush?Color="Yellow"?Opacity="1.0"?/>
????????????????????</DiffuseMaterial.Brush>
??????????????????</DiffuseMaterial>
????????????????</GeometryModel3D.Material>
????????????????<GeometryModel3D.Transform>
??????????????????<TranslateTransform3D?OffsetX="0"?OffsetY="20"?OffsetZ="60"?/>
????????????????</GeometryModel3D.Transform>
??????????????</GeometryModel3D>
????????????</ModelVisual3D.Content>
??????????</ModelVisual3D>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<GeometryModel3D?Geometry="{StaticResource?man}">
????????????????<GeometryModel3D.Material>
??????????????????<DiffuseMaterial>
????????????????????<DiffuseMaterial.Brush>
??????????????????????<SolidColorBrush?Color="black"?Opacity="1.0"?/>
????????????????????</DiffuseMaterial.Brush>
??????????????????</DiffuseMaterial>
????????????????</GeometryModel3D.Material>
????????????????<GeometryModel3D.Transform>
??????????????????<TranslateTransform3D?OffsetX="75"?OffsetY="20"?OffsetZ="0"?/>
????????????????</GeometryModel3D.Transform>
??????????????</GeometryModel3D>
????????????</ModelVisual3D.Content>
????????????
????????????
????????????<ModelVisual3D.Transform>
??????????????<Transform3DGroup>
????????????????<ScaleTransform3D?ScaleX="10"?ScaleY="10"?ScaleZ="10"??x:Name="scaleTransform"/>
????????????????<MatrixTransform3D/>
????????????????<RotateTransform3D?>
??????????????????<RotateTransform3D.Rotation?>
????????????????????<AxisAngleRotation3D?Angle="275"?Axis="0,0,1"?x:Name="myAngleRotationMan"/>
??????????????????</RotateTransform3D.Rotation>
????????????????</RotateTransform3D>
??????????????</Transform3DGroup>
????????????</ModelVisual3D.Transform>?
????????????
????????????
??????????</ModelVisual3D>
????????</ModelVisual3D.Children>
????????
????????<ModelVisual3D.Transform>
??????????<Transform3DGroup>
????????????<MatrixTransform3D/>
????????????<RotateTransform3D?>
??????????????<RotateTransform3D.Rotation?>
????????????????<AxisAngleRotation3D?Angle="0"?Axis="0,10,0"?x:Name="myAngleRotationChair"/>
??????????????</RotateTransform3D.Rotation>
????????????</RotateTransform3D>
??????????</Transform3DGroup>
????????</ModelVisual3D.Transform>
??????</ModelVisual3D>
????????<EventTrigger?RoutedEvent="Viewport3D.Loaded">
??????????<BeginStoryboard>
????????????<Storyboard>
??????????????<DoubleAnimation?
????????????????Storyboard.TargetName="myAngleRotationChair"
????????????????Storyboard.TargetProperty="Angle"
????????????????From="0"?To="360"?Duration="0:0:10"
????????????????RepeatBehavior="Forever"?/>
????????????</Storyboard>
??????????</BeginStoryboard>
????????</EventTrigger>
??????</Viewport3D.Triggers>
在這篇文章裏,將介紹如何實現一個簡單的三維場景,一個三維的空間,包括空間內的三維物體的組合.
首先介紹一下一個三維場景裏的基本元素:
先是定義一個簡單的三維的場景環境
代碼如下:
<Viewport3D?Name="myViewport"></Viewport3D>
以上是定義了一個名稱叫做 myViewport 的的三維場景,接下來可以在這個三位場景裏添加一些元素:
元素一:照相機
照相機是三維場景內用戶的視角,當然照相機也是唯一的。
來看如何定義一個簡單的照相機代碼:
<Viewport3D.Camera>????????<PerspectiveCamera?FarPlaneDistance="3000"?NearPlaneDistance="0.25"?FieldOfView="90"?Position="1800,0,0"?LookDirection="-1,0,0"?UpDirection="0,1,0"></PerspectiveCamera>
??????</Viewport3D.Camera>
這裏面描述了照相機在三維場景裏的位置,包括它觀察的角度,最遠的視線,等等這樣信息和屬性。如果想靈活的使用照相機改變視角會在第二講和第三講裏詳盡的介紹。
元素一:三維模型
三維模型是三維場景內的物體,也就是模型中的元素,不唯一,可以組合,重疊。
來看如何定義一個簡單的三維模型組合的代碼:
??????<ModelVisual3D?x:Name="topModelVisual3D">????????<ModelVisual3D.Children>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<DirectionalLight?Color="#FFFFFFFF"?Direction
????????????</ModelVisual3D.Content>
??????????</ModelVisual3D>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<GeometryModel3D?Geometry="{StaticResource?chair}">
????????????????<GeometryModel3D.Material>
??????????????????<DiffuseMaterial>
????????????????????<DiffuseMaterial.Brush>
??????????????????????<SolidColorBrush?Color="Yellow"?Opacity="1.0"?/>
????????????????????</DiffuseMaterial.Brush>
??????????????????</DiffuseMaterial>
????????????????</GeometryModel3D.Material>
????????????????<GeometryModel3D.Transform>
??????????????????<TranslateTransform3D?OffsetX="0"?OffsetY="-200"?OffsetZ="-600"?/>
????????????????</GeometryModel3D.Transform>
??????????????</GeometryModel3D>
????????????</ModelVisual3D.Content>
??????????</ModelVisual3D>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<GeometryModel3D?Geometry="{StaticResource?table}">
????????????????<GeometryModel3D.Material>
??????????????????<DiffuseMaterial>
????????????????????<DiffuseMaterial.Brush>
??????????????????????<SolidColorBrush?Color="Yellow"?Opacity="1.0"?/>
????????????????????</DiffuseMaterial.Brush>
??????????????????</DiffuseMaterial>
????????????????</GeometryModel3D.Material>
????????????????<GeometryModel3D.Transform>
??????????????????<TranslateTransform3D?OffsetX="0"?OffsetY="20"?OffsetZ="60"?/>
????????????????</GeometryModel3D.Transform>
??????????????</GeometryModel3D>
????????????</ModelVisual3D.Content>
??????????</ModelVisual3D>
??????????<ModelVisual3D>
????????????<ModelVisual3D.Content>
??????????????<GeometryModel3D?Geometry="{StaticResource?man}">
????????????????<GeometryModel3D.Material>
??????????????????<DiffuseMaterial>
????????????????????<DiffuseMaterial.Brush>
??????????????????????<SolidColorBrush?Color="black"?Opacity="1.0"?/>
????????????????????</DiffuseMaterial.Brush>
??????????????????</DiffuseMaterial>
????????????????</GeometryModel3D.Material>
????????????????<GeometryModel3D.Transform>
??????????????????<TranslateTransform3D?OffsetX="75"?OffsetY="20"?OffsetZ="0"?/>
????????????????</GeometryModel3D.Transform>
??????????????</GeometryModel3D>
????????????</ModelVisual3D.Content>
????????????
????????????
????????????<ModelVisual3D.Transform>
??????????????<Transform3DGroup>
????????????????<ScaleTransform3D?ScaleX="10"?ScaleY="10"?ScaleZ="10"??x:Name="scaleTransform"/>
????????????????<MatrixTransform3D/>
????????????????<RotateTransform3D?>
??????????????????<RotateTransform3D.Rotation?>
????????????????????<AxisAngleRotation3D?Angle="275"?Axis="0,0,1"?x:Name="myAngleRotationMan"/>
??????????????????</RotateTransform3D.Rotation>
????????????????</RotateTransform3D>
??????????????</Transform3DGroup>
????????????</ModelVisual3D.Transform>?
????????????
????????????
??????????</ModelVisual3D>
????????</ModelVisual3D.Children>
????????
????????<ModelVisual3D.Transform>
??????????<Transform3DGroup>
????????????<MatrixTransform3D/>
????????????<RotateTransform3D?>
??????????????<RotateTransform3D.Rotation?>
????????????????<AxisAngleRotation3D?Angle="0"?Axis="0,10,0"?x:Name="myAngleRotationChair"/>
??????????????</RotateTransform3D.Rotation>
????????????</RotateTransform3D>
??????????</Transform3DGroup>
????????</ModelVisual3D.Transform>
??????</ModelVisual3D>
來看一下效果:
?
?
?
到這裏就完成了整個的三維場景的建立。
補充元素:動畫效果
如果想讓整體的三維模型都能動起來,就需要為三維場景添加動畫效果。
看一段可以讓三維場景按縱軸(中心軸)旋轉的代碼:
???<Viewport3D.Triggers>????????<EventTrigger?RoutedEvent="Viewport3D.Loaded">
??????????<BeginStoryboard>
????????????<Storyboard>
??????????????<DoubleAnimation?
????????????????Storyboard.TargetName="myAngleRotationChair"
????????????????Storyboard.TargetProperty="Angle"
????????????????From="0"?To="360"?Duration="0:0:10"
????????????????RepeatBehavior="Forever"?/>
????????????</Storyboard>
??????????</BeginStoryboard>
????????</EventTrigger>
??????</Viewport3D.Triggers>
填寫如上代碼之後就完成了一個最簡單的三維動畫的處理。
好的~如果您對更多的三維場景變成想有所了解,請關註第二講。
如果您想下載源代碼或收聽語音教程,請訪問:微軟webcast
?
再次感謝您的關註,謝謝!
使用WPF實現3D場景[一]