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

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

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

假设你是高中毕业的,ok,数学知识几何知识中,我们学过  x,y,z   3个轴然后就可以画出形状了。

1. 新建空白窗体,grid换成canvas,然后新增一个Viewport3D元素

3d中显示的元素是无数个三角形组成的,比如正方体也是三角形组成的。我们来看下 MeshGeometry3D

Positions和TriangleIndices当然还有其他属性。Positions定义一系列3维坐标(x,y,z),TriangleIndices描述了怎么个点顺序,这两个好比StringFormat,Positions对应值,TriangleIndices对应位置

例如<MeshGeometry3D Positions="-1,0,0 0,1,0 1,0,0" TriangleIndices="0,2,1"/>表示从点(-1,0,0)到(1,0,0) 再到(0,1,0),好,你看懂了,还有个细节,三角形的出点顺序必须是逆时针的。

所以3维的空间中,调整z轴,就可以从远到近,从近到远。

Material材质,不同的材质,就会不同的    光源  的反射效果

除了前面材质,还有BackMaterial后面看的材质,如果不设置,则3d从后面看是什么也看不见的。

材质类提供了3种Material和一个Material组,Diffuse是创建平滑的无光泽表面,在各个方向上均匀地散射光线。

Specular是创建有光泽的、高亮度的外观,例如玻璃和金属,直接反向反射光线。

Emissive创建发光的外观,产生自己的光线(尽管这些光线不能从场景中的其他对象反射回来)

MaterialGroup组合多种材质,按照添加顺序叠加材质。

OK,到目前位置,界面上还是什么都看不见,我们还需要 光源摄像机

 


 

光源

灯光位置,类型,方向,灯光强度来照亮对象。

灯光类

www.ayjs.net

 

DirectionalLight使用沿着指定方向传播的平行光线填充场景

AmbientLight使用散射的光线填充场景

PointLight从空间中的一点向各个方向辐射的光线

SpotLight从一个点开始,以锥形向外辐射的光线。

从这里我们可以看出Viewport3D对象中可以放入很多ModelVisual3D对象,这里放入了一个平面三角形,接着我们又放入了一个光源。

<Window x:Class="ay3dDemo.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="aaronyang www.ayjs.net 安徽六安 杨洋 demo" Height="600" Width="1200">
    <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <Viewport3D Width="300" Height="300">
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <GeometryModel3D>
                        <GeometryModel3D.Geometry>
                            <MeshGeometry3D Positions="-1,0,0 0,1,0 1,0,0" TriangleIndices="0,2,1"/>
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>
                            <DiffuseMaterial Brush="Yellow" />
                        </GeometryModel3D.Material>
                        <GeometryModel3D.BackMaterial>
                            <DiffuseMaterial Brush="Red" />
                        </GeometryModel3D.BackMaterial>
                    </GeometryModel3D>
                </ModelVisual3D.Content>
            </ModelVisual3D>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <DirectionalLight
             Color="White"
             Direction="-1,-1,-1" />
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
    </Canvas>
</Window>

摄像机

PerspectiveCamera摄像机渲染场景,会使远处的对象看起来更小。

OrthographicCamera摄像机平行摄影3D对象,使3D对象保持相同的尺寸,而不管将形状放置什么位置。

MatrixCamera摄像机指定用于将3D场景变换到3D视图的矩阵。比如用于移植其他架构(如Direct3D)的代码需要使用这种类型的摄像机

选择相机容易,放置相机难。

<Viewport3D.Camera>
                <PerspectiveCamera
          Position="-2,2,2"
          LookDirection="2,-2,-2"
          UpDirection="0,1,0"
           />
            </Viewport3D.Camera>

1. 设置Position属性,指定在3D空间中放置摄像机的位置

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

2.LookDirection设置3D向量,指定摄像机方向

    假设聚焦在原点 (0,0,0)-(-2,2,2)等于(2,-2,-2)

3.UpDirection属性决定了摄像机的倾斜角度,通常设置为(0,1,0)这意味着向量垂直向上。

微软 提供了3DTools部分工具,可以简单使用,下载地址:链接:http://pan.baidu.com/s/10dHDW 密码:762q

添加项目并引用。使用窗口引入        xmlns:tools="clr-namespace:_3DTools;assembly=3DTools"

接着我们使用工具的ScreenSpaceLines3D类,画出3条线,方便调试和测试

关于光源和图形的操作呢,我们可以单击代码,第一个三角形的.Content处,然后vs就会出现这个空间调节空间,此时调节的是三角形,接着光标放到光源的.Content,此时调节的是光源的参数

关于摄像机调节的话,在Blend5中有个摄影轨迹

       =============潇洒的版权线==========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教程 更新如下:

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

标签列表