六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 289|回复: 0

WPF 3D 加载局部模型

[复制链接]

升级  13.33%

20

主题

20

主题

20

主题

秀才

Rank: 2

积分
70
 楼主| 发表于 2013-1-3 15:35:19 | 显示全部楼层 |阅读模式
WPF 3D 加载局部模型

    <div class="postText"><div id="cnblogs_post_body">这篇主要介绍如何实现局部加载模型。阅读这篇博客前,需要参考我的另一篇博文,动态加载模型:http://www.cnblogs.com/enjoyeclipse/archive/2012/03/21/2410439.html

1.效果:
    如图所示,因为整个沙盘场景太大,因此需要将桥墩加载并进行放大。不知道大家玩过实况足球没有,选择某个球员就有这种效果。
   
2.思路:
     1). 首先需要构造一个容器,这个容器有ViewPort元素;
     2). 从大沙盘中选取需要的局部模型,并克隆一份(因为WPF中模型对象的Tree关系,因此不能直接将Add(model),必须Add(model.Clone()),
     3). 将局部模型添加到容器的ViewPort中。

3.实现:
    1). 首先需要构造一个容器,这个容器有ViewPort元素。

         创建容器(UserControl):PartModelControl,最重要的里面要包含ViewPort,并提前把光照,摄像机什么的设置好
         xaml代码如下:
         <UserControl x:Class="UI.Common.UserControls.PartModelControl"
<div class="cnblogs_code">    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converter="clr-namespace:UI.Common.Converters"
    Background="Transparent"
    SnapsToDevicePixels="True"
    x:Name="modelPartControl" PreviewMouseDoubleClick="modelPartControl_MouseDoubleClick">
        ....
        <Viewport3D x:Name="_partViewPort">
            <Viewport3D.Camera>
                <!--<PerspectiveCamera x:Name="camera" FieldOfView="45" FarPlaneDistance="1782.5084757839907" LookDirection="0,0,-607.743292014972" NearPlaneDistance="0.1" Position="-0.0207443237299856,-2.1316282072803E-14,407.743292014972" UpDirection="0,1,0"/>-->
                <PerspectiveCamera x:Name="camera" FieldOfView="30" FarPlaneDistance="102122.68952517369" LookDirection="292.292480468755,-0.00048828125,-2204.4668208912" Position="-292.292480468755,0.00048828125,2204.4668208912" NearPlaneDistance="0.1"  UpDirection="0,1,0"/>
            </Viewport3D.Camera>
            <ModelVisual3D x:Name="World">
                <ModelVisual3D x:Name="AmbientLightContainer">
                    <ModelVisual3D.Content>
                        <AmbientLight x:Name="AmbientLight" Color="#FF7F7F7F"/>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
                <ModelVisual3D x:Name="DirectionalLightContainer">
                    <ModelVisual3D.Content>
                        <DirectionalLight x:Name="DirectionalLight" Color="#FF3F3F3F" Direction="0,0,-1">
                            <DirectionalLight.Transform>
                                <TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="3"/>
                            </DirectionalLight.Transform>
                        </DirectionalLight>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
                <ModelVisual3D.Transform>
                    <TranslateTransform3D x:Name="transform" OffsetX="0" OffsetY="0" OffsetZ="0" />
                </ModelVisual3D.Transform>
            </ModelVisual3D>
        </Viewport3D>
        <!--END Viewport-->
        ....
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表