WPF本身不支持直接的3D绘图,但是它提供了一些用于实现3D效果的高级技术。
如果你想要在WPF中进行3D绘图,你可以使用两种主要的方法:
-
WPF 3D:这是一种在WPF应用程序中创建3D图形的方式。WPF 3D提供了一些基本的3D形状(如立方体、球体和锥体)以及一些用于控制3D场景和对象的工具(如相机、光源和材质)。
在WPF中,3D对象模型的材质可以使用以下三种
-
DiffuseMaterial:漫反射,反射场景光效果
-
EmissiveMaterial:自发光,类似于电灯
-
SpecularMaterial:全反射,可以映射场景 贴图
在WPF中,一个3D模型的材质,就是决定模型看起来是什么样子的一种很重要的元素,如粗糙度、颜色、发光度等
WPF 3D对象模型光源如下
AmbientLight:环境光- 提供环境光,会照亮所有的对象,而不考虑对象的位置或方向。
DirectionalLight:平行光 - 它像远处的光源那样照亮(如太阳光),只具有一个Direction属性,没有位置信息,因此不直接投射到任何特定的对象上,而是照亮场景中的所有对象。
PointLight:点光源 - 像近处的光源那样照亮,具有一个位置并从该位置投射光,场景中的对象是根据对象相对于光源的位置和距离而被照亮的。
SpotLight:聚光灯 - 从PointLight继承,它的照亮方式与PointLight类似,但是它既具有位置又具有方向。
相关属性
Color:灯光颜色
Direction:光线方向(平行光、聚光灯)
Position:光源坐标(点光源、聚光灯)
Range:灯光范围(点光源)
InnerConeAngle:内光柱照射角度(聚光灯)
OuterConeAngle:外光柱照射角度(聚光灯)
属性 |
说明 |
备注 |
MeshGemetry3D |
网格标签 |
|
Positions |
点 |
呈现3D图形的标签 Positions="0,0,0(x,y,z) 3,0,0 3,2,0 0,2,0" 一个面的4个点 |
TraiangleIndices |
3 角形创建 |
TriangleIndices ="0,3,2(第一组) 0,1,2(第二组)" 设置Positions的3个点组成一个三角行 |
OrthographicCamera |
正交相机(远近比例都一样-很少用) |
|
PerspectiveCamera |
透视相机(近比例长远比例小,符合我们正常观察事物的视觉-常用) |
|
TextureCoordinates |
设置平面对象与3D对象的映射关系-用来解决平面设置背景图显示问题-如果不设置这个属性平面设置的背景图不显示 |
TextureCoordinates="1,1 1,0 0,0 0,1" |
相机标签对象属性
属性 | 说明 | 备注 |
Position | 相机的空间坐标(X,Y,Z) | Position="100,100,100" 设置视角x,y,z |
LookDirection | 观察方向,向量,相机观察口朝向 | LookDirection="-2,-2,-2" 设置相机的观看视角-相机观察的方向 |
FieldOfView | (透视相机属性) / 视野范围,一个值 | FieldOfView="90" 设置相机与观看物体的距离,离得远观看物体区域范围大,离得近观看物体区域范围小 |
Width | (正交相机属性)(焦距),视野范围 | Width="50" |
UpDirection | 相机上方方向,控制相机观察口旋转 | UpDirection="0,1,0" (x, y,z)设置相机视口的旋转角度,斜着拍还是正着拍 |
FarPlaneDistance | 远景距离,大于这个距离的场景不渲染 | FarPlaneDistance="1000" 设置相机远处景色的渲染范围,如果值设置的比较小,远处景色是模糊的 |
NearPlaneDistance | 近景距离,小于这个距离的场景不渲染 | NearPlaneDistance="1" 设置相机近处的晶圆渲染范围,如果值越大,近处景色是模糊的 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
|
后台关于3D地球的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
代码实例效果图:
这个3D动画地球是可以旋转的
3D图片用于辅助寻找3d坐标点顺序
3D面设置背景图显示方向
通过TextureCoordinates属性设置箭头的显示方向
TextureCoordinates="1,1 1,0 0,0 0,1"/> <!--箭头向下-->
<!--TextureCoordinates="1,1 0,1 0,0 1,0"/> 箭头向左-->
<!--TextureCoordinates="0,1 1,1 1,0 0,0"/> 箭头向右-->
<!--TextureCoordinates="0,1 0,0 1,0 1,1"/>--><!-- 箭头向上-->
本文章大半部分素材来自于朝夕教育,技术整理的不好。。。