欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    DirectX学习汇报.ppt

    • 资源ID:5427387       资源大小:287KB        全文页数:24页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    DirectX学习汇报.ppt

    学 习 汇 报,DirectX简介Direct3D基本知识Direct3D绘制流水线Direct3D光照及材质Direct3D纹理基础Mesh网格示例程序在WorldWind球体中渲染图形,提纲,DirectX DirectX是由微软公司开发的一种多媒体编程接口,它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形的显示及其声音效果。目前很多游戏的开发都是使用DirectX.DirectX软件开发工具包(SDK)目前最高版本是DirectX 11.,DirectX简介,DirectX的组件DirectDraw:通过直接访问显示硬件来提供高级的图象处理能力。Direct3D:三维图形的处理与显示,与OpenGL功能一样强大。DirectSound:提供延时的低音混合系统,支持硬件加速与声音设备的直接访问另外,DirectX还有DirectPlay,DirectMusic,DierctInput,DirectShow等组件。,DirectX简介,Direct3D基本知识,顶点 顶点代表相对于坐标系原点的位置信息,顶点的位置信息一般用Vector3结构表示。顶点格式 Direct3D中常用的顶点格式:PositionColored、PositionNormal、PositionOnly、PositionColoredTextured、PositionNormalTextured、TransformedColored 等,其中Position、Normal、Color、Textured分别表示顶点的位置、法线、颜色、纹理坐标等信息,Transformed表示已经转换到屏幕坐标。顶点坐标变换 Vector3.TransformCoordinate(Vector3 v,Matrix m),Direct3D基本知识,向量 向量代表一个有方向和长度的对象,与坐标系原点无关,一般用Vector3结构表示。向量的运算 点乘 float d=Vector3.Dot(Vector3 v1,Vector3 v2);叉乘 Vector3 v=Vector3.Cross(Vector3 v1,Vector3 v2);单位化Vector3.Normalize();长度 Vector3.Length();夹角 Vector3 v1,v2;v1.Normalize();v2.Normalize();return Math.Acos(Vector3.Dot(v1,v2);,Direct3D基本知识,法线 法线是一个向量,对于平面来说它是垂直于平面的一个单位向量,一个平面的法线可以使用平行于该平面的两个向量的叉积计算得来。如假设一个三角面的三个顶点为V1,V2,V3则 V12=V2-V1;V13=V3-V1;Vector3 normal=Vector3.Cross(V12,V13);normal.Normalize();矩阵运算 单位阵 Matrix.Identity;逆矩阵 Matrix.Invert(Matrix source);,Direct3D基本知识,矩阵的基本变换平移及平移矩阵,缩放及缩放矩阵,旋转及旋转矩阵,组合变换,Direct3D基本知识,基本图元图元(primitives)是Direct3D中定义的基本图形表示,它是组成一个单一实体基本单元。图元类型PrimitiveType.PointList/LineList/LineStrip/TriangleList/TriangleStrip/TriangleFan,Direct3D基本知识,顶点索引什么情况下建立顶点索引?当绘制一个比较复杂的图形时,众多三角形单元之间会共享许多公共顶点,这样会浪 费大量的内存空间和系统带宽。LineList,TriangleList两种图元类型需要建立顶点索引索引意义:1.减少显存占用 2.减少绘制次数(DrawIndexedPrimitives)VertexBuffer与IndexBufferVertexBuffer是用于存放顶点数据的一块内存。IndexBuffer就是一块保存了顶点数据索引的缓冲。,Direct3D绘制流水线,绘制流水线把三维场物体在二维的屏幕中显示出来,要经过一系列的变换(世界、观察、投影变换),这一过程称为绘制流水线。世界变换将模型局部坐标系的坐标通过旋转、平移、缩放变换为世界坐标系中的坐标。观察变换观察变换是将世界坐标系中的坐标变换为观察者坐标系中的坐标,这为投影变换做准备,因为经过此次变换后观察者在坐标原点,Z轴坐标表示的是到观察者的距离,投影面平行于XY平面。观察矩阵的计算:Matrix.LookAtLH(CamPos,CamTarget,up);/左手坐标系,Direct3D绘制流水线,投影变换将观察者坐标系中的坐标变换为投影坐标系中的坐标,即将3D模型投影到XY平面上。投影矩阵的计算:Matrix.PerspectiveFovLH(fieldOfViewY,aspectRadio,znear,zfar);/左手坐标系,如图所示,O为观察者的位置,屏幕上最终显示的是ABCD和ABCD两个平面之间的模型。fieldOfViewY 视场角aspectRadio 纵横比znear,zfar 近远平面距离,Direct3D光照,光照计算模型环境光、漫反射光、镜面反射光和自发光。光源类型点光源:有颜色和位置,但没有方向,它向所有方向发射的 光都一样方向光:有颜色和方向,但没有位置聚光灯:有颜色、方向和位置,类似于现实生活中的聚光灯,Direct3D材质,材质(Material)环境光颜色(Ambient)漫反射颜色(Diffuse)镜面反射颜色(Specular)自发光颜色(Emissive)物体的颜色物体最终呈现的颜色与法线有关,光照的方向如果与法线的方向一致,则表示物体没有被光照射到,呈现黑色。光与材质的共同作用决定物体最终的颜色。被光照射到的物体表面会吸收掉部分光线,也会反射部分光线。简单的说,白色物体会反射全部光线,黑色物体会吸收所有光线。光线被物体表面反射后,到达镜头的光线强度就是最终的光照结果;物体表面的纹理和材质就是用来设置物体反射光线的能力。,Direct3D纹理基础,常用纹理格式bmp,jpg,png,tga,dds等。纹理坐标纹理元素在位图中的二维坐标纹理坐标用U,V表示,U代表水平方向,V代表竖直方向。一般情况下,使用相对纹理坐标,相对纹理坐标值在0.0,1.0范围内,例如在宽、高分别为100、80像素的位图中,第5列、第4行的纹理元素P的实际纹理坐标和相对纹理坐标分别是:,Mesh网格,Mesh类 在Direct3D中,许多模型对象都可以直接通过Mesh网格来绘制,如Mesh.Box、Mesh.Sphere、Mesh.Teapot等。Mesh meshObject;/定义一个Mesh对象/绘制一个棱长为4的正方体 meshObject=Mesh.Box(device,4.0f,4.0f,4.0f);/绘制一个茶壶 meshObject=Mesh.Teapot(device);Mesh类还提供了一些从外部文件导入网格的方法,其中的FromFile()方法可以从.X文件导入网格。以下为导入名为plane.X的模型文件的代码:Mesh.FromFile(“plane.x”,MeshFlags.SystemMemory,device);,示例程序,Direct3D设备的创建(DirectXWindow.cs)PresentParameters presentParams=new PresentParameters();/以窗口模式显示presentParams.Windowed=true;/后备缓存交换的方式,绘制完成后从内在清除presentParams.SwapEffect=SwapEffect.Discard;/允许使用自动深度测试 presentParams.EnableAutoDepthStencil=true;/深度缓存单元为16位二进制数presentParams.AutoDepthStencilFormat=DepthFormat.D16;/实例化设备类对象drawArgs.LocalDevice=new Device(0,DeviceType.Hardware,this,CreateFlags.SoftwareVertexProcessing,presentParams);,示例程序,设置变换矩阵(DirectXWindow.cs)/相机位置drawArgs.CameraPosition=new Vector3(0,3,5);/相机目标位置drawArgs.CameraTarget=new Vector3(0,0,0);/世界变换矩阵drawArgs.LocalDevice.Transform.World=Matrix.Identity;/观察矩阵=Matrix.LookAtLH(drawArgs.CameraPosition,drawArgs.CameraTarget,new Vector3(0,1,0);/投影矩阵n=Matrix.PerspectiveFovLH(float)Math.PI/4,this.Width/this.Height,0.1f,100);,示例程序,创建顶点缓冲(Lighting3DBox.cs)/实例化顶点缓冲m_vertexBuffer=new VertexBuffer(typeof(CustomVertex.PositionColored),8,drawArgs.LocalDevice,Usage.Dynamic|Usage.WriteOnly,CustomVertex.PositionColored.Format,Pool.Default);/定义PositionColored 格式的顶点CustomVertex.PositionColored verts=newCustomVertex.PositionColored8;verts0.Position=new Vector3(3,2,0);/顶点位置verts0.Color=Color.Yellow.ToArgb();/顶点颜色verts7.Position=new Vector3(4,1,0);/顶点位置verts7.Color=Color.Yellow.ToArgb();/顶点颜色/为顶点缓冲区填充数据m_vertexBuffer.SetData(verts,0,LockFlags.None);,示例程序,创建索引缓冲(Lighting3DBox.cs)/实例化索引缓冲m_indexBuffer=new IndexBuffer(typeof(int),36,drawArgs.LocalDevice,Usage.WriteOnly,Pool.Default);/定义索引int indices=new int 0,1,3,/绘制第一个三角形的索引 7,6,5/绘制第八个三角形的索引;/为顶点缓冲区填充数据m_indexBuffer.SetData(indices,0,LockFlags.None);,示例程序,Render方法(Lighting3DBox.cs)/设置背面剔除模式(有三种模式Clockwise,CounterClockwise,None)drawArgs.LocalDevice.RenderState.CullMode=Cull.None;/设置填充模式(有点、线、面三种模式)drawArgs.LocalDevice.RenderState.FillMode=FillMode.Solid;/设置顶点格式drawArgs.LocalDevice.VertexFormat=CustomVertex.PositionColored.Format;/设置数据来源drawArgs.LocalDevice.SetStreamSource(0,m_vertexBuffer,0);/设置索引缓冲区drawArgs.LocalDevice.Indices=m_indexBuffer;/绘图drawArgs.LocalDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList,0,0,8,0,12);,示例程序,设置光照(Lighting3DBox.cs)/开启渲染设备的灯光 drawArgs.LocalDevice.RenderState.Lighting=true;/设置0号灯光的类型为平行光drawArgs.LocalDevice.Lights0.Type=LightType.Directional;/光照的漫反射颜色drawArgs.LocalDevice.Lights0.Diffuse=System.Drawing.Color.White;/此处设置光照的方向为摄像机到摄像机目标的方向drawArgs.LocalDevice.Lights0.Direction=drawArgs.CameraTarget-drawArgs.CameraPosition;/打开0号灯光drawArgs.LocalDevice.Lights0.Enabled=true;/设置1号灯光的类型为点光源drawArgs.LocalDevice.Lights1.Type=LightType.Point;,示例程序,设置材质(Lighting3DBox.cs)m_material=new Material();/设置环境光m_material.Ambient=Color.FromArgb(0,0,0);/设置漫反射光m_material.Diffuse=Color.LightGreen;/设置自发光m_material.Emissive=Color.FromArgb(0,0,0,0);/设置镜面反射光m_material.Specular=Color.DarkRed;/反射高光清晰度m_material.SpecularSharpness=15.0f;/将当前材质传给绘图设备drawArgs.LocalDevice.Material=m_material;,在WorldWind球体中渲染图形,RenderableObject类 在WorldWind球体中绘制图形可以继承RenderableObject类,重写该类的Initialize方法、Render方法、Update方法等,然后将编写的类的对象添加到worldWindow的可渲染对象列表里,如下代码:/实例化自己编写的图形对象 MyModel mymodel=new MyModel(,vvv);/将对象添加到可渲染对象的列表中.ChildObjects.Add(mymodel);/定位到球体中放置对象的位置 worldWindow.GotoLatLonAltitude(39.838f,116.367f,200);,

    注意事项

    本文(DirectX学习汇报.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开