




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 习 汇 报,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与IndexBuffer VertexBuffer是用于存放顶点数据的一块内存。 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; /观察矩阵 drawArgs.LocalDevice.Transform.View=Matrix.LookAtLH( drawArgs.CameraPosition, drawArgs.CameraTarget, new Vector3(0, 1, 0); /投影矩阵 drawArgs.LocalDevice.Transform.Projection=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_ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计量所考试题库及答案
- 2025年贵州省遵义市继续教育公需课考试题(含答案)
- 2025年新疆籽棉订购合作合同范本
- 2025年贵州大生态公需科目考试题目及答案
- 2025年广西壮族自治区公务员行测(A类)真题及答案
- 2025年镇江市中考英语试题卷(含答案及解析)
- 兽医考试病理学真题及答案
- 煤矿电气焊考试题及答案
- 安全员证考试试题及答案
- 软通硬件笔试题及答案
- 葫芦种植技术
- 热敏电阻器配方设计与制备工艺详解
- 监理工程师题库检测试题打印含答案详解【完整版】
- 2025年江西省高考生物试卷真题(含标准答案及解析)
- 2025年辅警笔试题库行测及答案指导
- 运维7×24小时服务保障方案
- 单招临床医学试题及答案2025年版
- 2025年辽宁省中考语文真题卷含答案解析
- 2《归园田居》任务式公开课一等奖创新教案(表格式)统编版高中语文必修上册
- 银行文明礼仪课件
- 虚拟电厂运行关键课件
评论
0/150
提交评论