事先说明:本文使用的是WPF程序自带的3d功能,想要用winform实现加载3d模型的可以退散了。
先上效果图吧。
我导入了两个模型,一个汽车和一个美女,都是在网上下载的obj格式的文件。导入之后调整了2个模型之间的位置关系,又添加了鼠标滚轮缩放,旋转的功能,这样我们就可以方便查看模型的各个细节了。
C#动态读取obj文件,加载的基本思路就是打开文件,解析obj格式,生成ModelVisual3D。我这里使用的是一个网上别人写的WavefrontObjLoader.cs。代码比较复杂,我们没必要全部看懂,只要会用就够了!
将WavefrontObjLoader.cs导入项目中
在初始化事件中加载模型并显示。使用的大概方式很简单,如下。
//new一个loader对象 WavefrontObjLoader wfl = new WavefrontObjLoader(); //ModelVisual3DWithName是WavefrontObjLoader定义的继承ModelVisual3D的对象,直接使用ModelVisual3D也是可以的 //导入obj,第一个模型命名为m ModelVisual3DWithName m = wfl.LoadObjFile(@"C:\Users\hasee\Desktop\WpfApplication2\WpfApplication2\Lancer_Evolution_10.obj"); m.Content = myModel3DGroup; //导入obj,第二个模型命名为n var n = wfl.LoadObjFile(@"C:\Users\hasee\Desktop\WpfApplication2\WpfApplication2\精细人体.obj"); n.Content = myModel3DGroup; //将两个模型添加到场景中 vp.Children.Add(m); vp.Children.Add(n); //vp是在xaml中定义的viewport3D
xaml中也是很简单,设置如下:
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MouseMove="Window_MouseMove" Title="MainWindow" Height="350" Width="525"> <Grid x:Name="lay" Background="Azure" MouseWheel="VP_MouseWheel"> <Viewport3D x:Name="vp" MouseLeftButtonDown="vp_MouseLeftButtonDown" Margin="0,31,0.4,-0.2"> <Viewport3D.Camera> <PerspectiveCamera FieldOfView="45" FarPlaneDistance="100" LookDirection="0,0,-3.4142135623731" NearPlaneDistance="0.1" Position="0,0,3.4142135623731" UpDirection="0,1,0"/> </Viewport3D.Camera> </