wpf 3d显示
百度或者谷歌一下,3d,看吧,介绍ModelVisual3D,介绍GeometryModel3D,介绍Model3DGroup,都简单的介绍了一 下,但是,这些东西如果我想知道,我直接去msdn不就行了,齐而且全,我还去百度谷歌什么,我只是想知道如何和在viewport3d中显示一个图片而 已,可怜的中文资料!
好了,如果是高手,就甭看了,这只是一个简单介绍如果用3d的小例子,如果是跟我一样想学3d,但是不知道如何入门的 菜鸟,我只能说,咱们都是同志
Xaml设计中:
<Viewport3D x:Name="_view">
</Viewport3D>
添加这样一个viewport3D控件,命名。
代码中:
全局变量:
定义一个cameral,也就是所谓的摄像机,这个东西就是相当于眼睛,你的眼睛不可能看到360度,如果你想看后面的东西需要的就是转过头。你可以看远近,也可以看上下左右,明白?不明白我也说不清楚了。
PerspectiveCamera _camera=null;
在windows_load里面把设置:
_camera = new PerspectiveCamera();
_camera.Position = new Point3D(0, 0, 5);
_camera.LookDirection = new Vector3D(0, 0, -5);
_camera.UpDirection = new Vector3D(0, 1, 0);
_camera.FieldOfView = 45;
_view.Camera = _camera;
_view.Children.Add(getg3(@"c:\image",1));
只解释后两句,是设置_view的摄像机绑定,上面的不懂msdn去!最后一句自己写的一个函数:
private ModelVisual3D getg3(string filepath, int index)
{
}
函数返回值是一个 ModelVisual3D 。
private ModelVisual3D getg3(string filepath, int index)
{
//定义一个ModelVisual3D对象,作为返回值。
ModelVisual3D _visual = new ModelVisual3D();
//下面连个是临时变量,读取图片用的
BitmapImage bmp;
ImageSource img ;
//DiffuseMaterial 这个东西是为了返回一个brush,brush也就是为了返回一个图片,暂且这么理解!我解释不大清楚!其实是为了填充 Material这个东西!
DiffuseMaterial dm = new DiffuseMaterial();
GeometryModel3D geometrymodel3d = new GeometryModel3D();
Model3DGroup model3dgroupmodel= new Model3DGroup();
MeshGeometry3D MeshGeometry3D1 = new MeshGeometry3D();
model3dgroupmodel.Children.Add(geometrymodel3d);
Transform3DGroup tg = new Transform3DGroup();
tg.Children.Add(new TranslateTransform3D(0, 0, 0));
tg.Children.Add(new ScaleTransform3D(0.25, 0.25, 0.2));
tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), -45)));
model3dgroupmodel.Transform = tg;
bmp = new BitmapImage(new Uri(@“c:\image\1.jpg”));
img = bmp;
dm.Brush = new ImageBrush((ImageSource)(img));
geometrymodel3d.Material = dm;
model3dgroupmodel.Children.Add(geometrymodel3d);
MeshGeometry3D1 = new MeshGeometry3D();
MeshGeometry3D1.Positions = ((Point3DCollection)new
Point3DCollectionConverter().ConvertFromString("-1,1,1 -1,-1,1 1,-1,1
1,1,1"));
MeshGeometry3D1.TriangleIndices = ((Int32Collection)new
Int32CollectionConverter().ConvertFromString("0,1,2 0,2,3"));
MeshGeometry3D1.TextureCoordinates = ((PointCollection)new
PointCollectionConverter().ConvertFromString("0,0 0,1 1,1 1,0"));
geometrymodel3d.Geometry = MeshGeometry3D1;
AmbientLight AmbientLight1 = new AmbientLight();
AmbientLight1.Color = Colors.Gray;
model3dgroupmodel.Children.Add(AmbientLight1);
_visual.Content = model3dgroupmodel;
return _visual;
}