当前位置:网站首页 / WPF / 正文

[Aaronyang] 写给自己的WPF4.5 笔记22 [3d交互与动画 3/4]

时间:2015年03月17日 | 作者 : aaronyang | 分类 : WPF | 浏览: 4617次 | 评论 0

OK,前面我们的3d模型都比较囧啊,最近也看了一点ZAM了解了一下,大致至少可以做个简单的模型用来演示。

1.交互,动起来的思路

   ①修改Model3D对象的变换

   ②修改应用于ModelVisual3D对象的变换,可改变整个场景

   ③修改灯光的变换

   ④修改摄像机的变换

 

1.1 我们使用ZAM做一个球,并贴图

 打开ZAM3D软件,点击球体,然后单击选中球,然后选中材质的位图的第2个地球,拖拽到球上

右键单击球不释放鼠标,上下调整大小,然后导出xaml,放置桌面,然后桌面会有2个文件,一个xaml一个是图片,我们把他们拷贝到项目去

  

我们新建空白窗口,放一个grid,2行,第一行放操作按钮,第二行放这个地球球体

拷贝viewport3d代码,然后光标置于<ModelVisual3D.Content后,xaml可视化器就会出现可调整状态,你可以继续调节。

1.1 我们引入  xmlns:tools="clr-namespace:_3DTools;assembly=3DTools",学会使用TrackballDecorator

然后在Viewport3D上方加入 <tools:TrackballDecorator Grid.Row="1"> 并在Viewport3D底部加上  </tools:TrackballDecorator>

OK,运行项目,效果图如下:

1.2 事件触发动画

我们找到变换的地方,自己加上名字rotatez,以前这里的的AxisAngleRotation3D的Axis是0 1 0 表示是绕y轴旋转,我换成了001表示绕z轴旋转。

我们试着手动调整值,看看xaml会不会动

OK,所以我们只要改变这两个属性的值就行了,我们增加一个按钮,增加事件触发器,增加动画

慢着,在这里发现name加不上,好吧,我们加在Model3DGroup上,Model3DGroup是继承Model3D的,所以肯定能变换。

我表示外部触发器无法修改定义在resources中的值,所以我们只能修改Transform了,从而修改资源,这里是DynamicResource,所以每次修改都会重新变化。

<StackPanel Orientation="Horizontal">
            <Button x:Name="autoCircle" Content="自动旋转" Width="83">
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard RepeatBehavior="Forever">
                                <DoubleAnimation To="360"  Duration="0:0:2" Storyboard.TargetName="Scene" Storyboard.TargetProperty="Transform.Children[2].Rotation.Angle"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>
            <Button x:Name="movecamera" Content="移动相机" Margin="10,0,0,0" Width="83"/>
        </StackPanel>

我们增加一个按钮,很好,F5运行吧

       =============潇洒的版权线==========www.ayjs.net===== Aaronyang ========= AY =========== 安徽 六安 杨洋 ==========   未经允许不许转载 =========

当然这是简单的动画,好的画,用3dsmax提前录制好,触发时候是播放对应动画。不同的状态播放不同的动画。

表示移动相机我还是不太灵活,表示在blend中录制吧

<Storyboard x:Key="movec">
            <Point3DAnimationUsingKeyFrames Storyboard.TargetProperty="(ProjectionCamera.Position)" Storyboard.TargetName="FrontOR6">
                <EasingPoint3DKeyFrame KeyTime="0:0:0.4" Value="0.117,0.052,6.739"/>
                <EasingPoint3DKeyFrame KeyTime="0:0:0.8" Value="0.245,-0.066,6.715"/>
                <EasingPoint3DKeyFrame KeyTime="0:0:1.4" Value="-0.016,-0.114,6.741"/>
                <EasingPoint3DKeyFrame KeyTime="0:0:1.9" Value="-0.17,-0.017,6.733"/>
                <EasingPoint3DKeyFrame KeyTime="0:0:2.2" Value="0.028,0.027,6.747"/>
            </Point3DAnimationUsingKeyFrames>
            <Vector3DAnimationUsingKeyFrames Storyboard.TargetProperty="(ProjectionCamera.UpDirection)" Storyboard.TargetName="FrontOR6">
                <EasingVector3DKeyFrame KeyTime="0:0:0.4" Value="-0.006,0.999,-0.052"/>
                <EasingVector3DKeyFrame KeyTime="0:0:0.8" Value="0.023,0.998,0.062"/>
                <EasingVector3DKeyFrame KeyTime="0:0:1.4" Value="0.022,0.993,0.114"/>
                <EasingVector3DKeyFrame KeyTime="0:0:1.9" Value="0.038,0.999,0.024"/>
                <EasingVector3DKeyFrame KeyTime="0:0:2.2" Value="0.042,0.999,-0.029"/>
            </Vector3DAnimationUsingKeyFrames>
            <Vector3DAnimationUsingKeyFrames Storyboard.TargetProperty="(ProjectionCamera.LookDirection)" Storyboard.TargetName="FrontOR6">
                <EasingVector3DKeyFrame KeyTime="0:0:0.4" Value="-0.117,-0.052,-0.992"/>
                <EasingVector3DKeyFrame KeyTime="0:0:0.8" Value="-0.245,0.066,-0.968"/>
                <EasingVector3DKeyFrame KeyTime="0:0:1.4" Value="0.016,0.114,-0.994"/>
                <EasingVector3DKeyFrame KeyTime="0:0:1.9" Value="0.17,0.017,-0.986"/>
                <EasingVector3DKeyFrame KeyTime="0:0:2.2" Value="-0.028,-0.027,-1"/>
            </Vector3DAnimationUsingKeyFrames>
        </Storyboard>

增加一个按钮使用这个动画

<Button x:Name="movecamera" Content="移动相机" Margin="10,0,0,0" Width="83">
                <Button.Triggers>
                    <EventTrigger RoutedEvent="ButtonBase.Click">
                        <BeginStoryboard Storyboard="{StaticResource movec}">
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>

F5运行效果:

OK,到目前为止你应该很好的了解了WPF中的3d一些操作,下一篇,我们来说说ModelUIElement3D类,并演示3d中的命中测试,3d的面上的控件

       =============潇洒的版权线==========www.ayjs.net===== Aaronyang ========= AY =========== 安徽 六安 杨洋 ==========   未经允许不许转载 =========

       -------------------小小的推荐,作者的肯定,读者的支持。推不推荐不重要,重要的是希望大家能把WPF推广出去,别让这么好的技术消失了,求求了,让我们为WPF技术做一份贡献。-----------------

 

推荐您阅读更多有关于“WPF4.5,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf,目前主maui

招聘合肥一枚WPF工程师,跟我一个开发组,10-15K,欢迎打扰

目前在合肥市企迈科技就职

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表