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

效果图预览:

1. 3d中的命中测试

我新建了一个空的窗口,用zam做了一个长方体,深度很小。然后导出xaml

<Viewport3D x:Name="ZAM3DViewport3D" ClipToBounds="true" Width="400" Height="300" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/interactivedesigner/2006" xmlns:c="http://schemas.openxmlformats.org/markup-compatibility/2006" c:Ignorable="d">
    <Viewport3D.Resources>
        <ResourceDictionary>
            <MaterialGroup x:Key="ER___Flat_06MR1" >
                <DiffuseMaterial>
                    <DiffuseMaterial.Brush>
                        <SolidColorBrush Color="#999999" Opacity="1.000000"/>
                    </DiffuseMaterial.Brush>
                </DiffuseMaterial>
            </MaterialGroup>
            <Transform3DGroup x:Key="SceneTR7" >
                <TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
                <ScaleTransform3D ScaleX="1" ScaleY="1" ScaleZ="1"/>
                <RotateTransform3D>
                    <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D Angle="0" Axis="0 1 0"/>
                    </RotateTransform3D.Rotation>
                </RotateTransform3D>
                <TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
            </Transform3DGroup>
            <Transform3DGroup x:Key="立方体OR9TR8" >
                <TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
                <ScaleTransform3D ScaleX="1" ScaleY="1" ScaleZ="1"/>
                <RotateTransform3D>
                    <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D Angle="0" Axis="0 1 0"/>
                    </RotateTransform3D.Rotation>
                </RotateTransform3D>
                <TranslateTransform3D OffsetX="-0.258329" OffsetY="0.0941457" OffsetZ="-0.662509"/>
            </Transform3DGroup>
            <MeshGeometry3D x:Key="立方体OR9GR10"
                TriangleIndices="0,1,2 2,3,0 4,5,6 6,7,4 8,9,10 10,11,8 12,13,14 14,15,12 16,17,18 18,19,16 20,21,22 22,23,20 "
                Normals="0,0,-1 0,0,-1 0,0,-1 0,0,-1 0,0,1 0,0,1 0,0,1 0,0,1 0,-1,0 0,-1,0 0,-1,0 0,-1,0 1,0,0 1,0,0 1,0,0 1,0,0 0,1,0 0,1,0 0,1,0 0,1,0 -1,0,0 -1,0,0 -1,0,0 -1,0,0 "
                Positions="-0.66,-0.405,0 -0.66,0.405,0 0.66,0.405,0 0.66,-0.405,0 -0.66,-0.405,0 0.66,-0.405,0 0.66,0.405,0 -0.66,0.405,0 -0.66,-0.405,0 0.66,-0.405,0 0.66,-0.405,0 -0.66,-0.405,0 0.66,-0.405,0 0.66,0.405,0 0.66,0.405,0 0.66,-0.405,0 0.66,0.405,0 -0.66,0.405,0 -0.66,0.405,0 0.66,0.405,0 -0.66,0.405,0 -0.66,-0.405,0 -0.66,-0.405,0 -0.66,0.405,0 "
            />
        </ResourceDictionary>
    </Viewport3D.Resources>

    <Viewport3D.Camera>
        <PerspectiveCamera x:Name="前视OR6" FarPlaneDistance="10" LookDirection="0,0,-1" UpDirection="0,1,0" NearPlaneDistance="2" Position="0,0,2.38396" FieldOfView="39.5978" />
    </Viewport3D.Camera>

    <ModelVisual3D>
        <ModelVisual3D.Content>
            <Model3DGroup x:Name="Scene" Transform="{DynamicResource SceneTR7}"> <!-- 场景 (XAML Path = ) -->
                <AmbientLight Color="#333333" />
                <DirectionalLight Color="#FFFFFF" Direction="0.0397419,0.00265522,-0.999206" />
                <DirectionalLight Color="#FFFFFF" Direction="0.648078,0.0259535,-0.761131" />
                <Model3DGroup x:Name="立方体OR9" Transform="{DynamicResource 立方体OR9TR8}"> <!-- 立方体 (XAML Path = (Viewport3D.Children)[0].(ModelVisual3D.Content).(Model3DGroup.Children)[3]) -->
                    <GeometryModel3D x:Name="立方体OR9GR10" Geometry="{DynamicResource 立方体OR9GR10}" Material="{DynamicResource ER___Flat_06MR1}" BackMaterial="{DynamicResource ER___Flat_06MR1}"/>
                </Model3DGroup>
            </Model3DGroup>
        </ModelVisual3D.Content>
    </ModelVisual3D>
</Viewport3D>

我们给ModelVisual3D.Transform中的RotateTransform3D中的AxisAngleRotation3D加上一个名字axisRotation

内容已经迁移到:http://www.ayjs.net/2015/03/63/

OK,到目前为止,WPF的基础3D知识已经讲完了,谢谢你的阅读。

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

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

时间: 2024-10-14 05:49:29

[Aaronyang] 写给自己的WPF4.5 笔记23 [3d交互与动画 4/4]的相关文章

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

OK,前面我们的3d模型都比较囧啊,最近也看了一点ZAM了解了一下,大致至少可以做个简单的模型用来演示. 1.交互,动起来的思路 ①修改Model3D对象的变换 ②修改应用于ModelVisual3D对象的变换,可改变整个场景 ③修改灯光的变换 ④修改摄像机的变换 1.1 我们使用ZAM做一个球,并贴图 打开ZAM3D软件,点击球体,然后单击选中球,然后选中材质的位图的第2个地球,拖拽到球上 右键单击球不释放鼠标,上下调整大小,然后导出xaml,放置桌面,然后桌面会有2个文件,一个xaml一个是

[Aaronyang] 写给自己的WPF4.5 笔记20 [3d课 1/4]

假设你是高中毕业的,ok,数学知识几何知识中,我们学过  x,y,z   3个轴然后就可以画出形状了. 1. 新建空白窗体,grid换成canvas,然后新增一个Viewport3D元素 3d中显示的元素是无数个三角形组成的,比如正方体也是三角形组成的.我们来看下 MeshGeometry3D Positions和TriangleIndices当然还有其他属性.Positions定义一系列3维坐标(x,y,z),TriangleIndices描述了怎么个点顺序,这两个好比StringFormat

[Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton篇 1/4]

我的文章一定要对读者负责-否则不是好文章  ----       www.ayjs.net  aaronyang技术分享 文章导航: 介绍vs2013 WPF开发,属性代码相关技巧 实战AyImageButton 1.0细用慢讲,学会用户控件,依赖属性,属性回调事件 诞生AyImageButton 1.1 支持 控件简单写法,支持自定义AyImageButton写法,提供详细的API 效果图: AyImageButton记录 源码下载:http://pan.baidu.com/s/1eQlHly

[Aaronyang] 写给自己的WPF4.5 笔记13[二维自定义控件技巧-可视化状态实战,自定义容器,注册类命令,用户控件补充]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 博文摘要:欢迎大家来支持我的<2013-2015 Aaronyang的又一总结,牧童遥指纳尼村>绝对好文章 关于<写给自己的WPF4.5 笔记14,已在官网发布> 1.讲解了自定义控件加入命令支持的两种手段,补充用户控件的客户定义模板 2.实战的方式讲解了无外观控件,可以让使用者定义模板,讲解模板PART,使用可视化状态组,动画的使用 效果演示:

[Aaronyang] 写给自己的WPF4.5 笔记19[Visual类图文并茂讲解]

文章虽小,内容还好,且看且珍惜. 当界面上使用数千个矢量图形,例如实时统计图,粒子碰撞,比如超级玛丽游戏,图像一直在绘,过量的使用WPF的元素系统和Shape类会使用程序变慢,所以我们需要使用Visual类手动进行渲染. Visual类是很多WPF元素的父类.所以掌握它当然很重要了. Visual的开销小于Geometry小于Path Visual作为抽象类,有UIElement这个子类,也有Viewport3DVisual类(3D知识中的) 放置Visual的对象的容器:ContainerVi

[Aaronyang] 写给自己的WPF4.5 笔记[2依赖属性]

人生的意义不在于拿一手好牌,而在于打好一手坏牌 --Aaronyang的博客(www.ayjs.net)-www.8mi.me =============时隔两年后再看WPF========== 因为以前的经验,所以继承FrameworkElement,我就简写继承FWE ,继承UIElement就写继承UIE 后面重头戏就是blend中的开发,不想写的千篇一律.如果期待,左侧有关注按钮. 个人感觉,下面的这张图标比较重要,它或许有些帮助.我看东西只看分析出原理,你就可以拓三返一. Tip: 只

[Aaronyang] 写给自己的WPF4.5 笔记8[复杂数据处理三步曲,数据视图精讲1/3]

真的好累了 ,笑了.做回自己吧       -------------      Aaronyang技术分享 www.ayjs.net 博文摘要: 详细介绍了WPF中视图的种类和开始学之前的准备工作 视图的 分页视图导航 DEMO1 详细讲解了 视图中xaml的声明方式,以及xaml的排序和分组 DEMO2 实例讲解了DataTable的BindingListCollectionView的类似操作 DEMO3 讲解了LINQ中的过滤 Predicate委托,以及过滤的几种方式 讲解了 视图中后台

[Aaronyang] 写给自己的WPF4.5 笔记6[三巴掌-大数据加载与WPF4.5 验证体系详解 2/3]

我要做回自己--Aaronyang的博客(www.ayjs.net) 博客摘要: Virtualizing虚拟化DEMO 和 大数据加载的思路及相关知识 WPF数据提供者的使用ObjectDataProvider 和 XmlDataProvider WPF验证 第一:使用自带的属性SET抛出异常,前台捕捉到异常,描红 第二:我们可以自定义验证规则,替代刚开始的异常捕捉验证 第三:我们可以使用INotifyDataErrorInfo方式,增加异常,并实现了验证通知和还原非法值 第四:我们使用了Er

[Aaronyang] 写给自己的WPF4.5 笔记[3MenuItem中的icon]

敢于尝试,就等于你已经向成功迈出了第一步 --Aaronyang的博客(www.ayjs.net)-www.8mi.me =============时隔两年后再看WPF========== 因为以前的经验,所以继承FrameworkElement,我就简写继承FWE ,继承UIElement就写继承UIE 后面重头戏就是blend中的开发,不想写的千篇一律.如果期待,左侧有关注按钮. 1. v1.0菜单 新建WPF项目,右键项目-属性-资源          导入几个项目用到的图标 第一种:带图