使用C#加载obj格式的3d模型,并实现缩放、旋转等变换

事先说明:本文使用的是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>
        </
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值