已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习汇报,DirectX简介Direct3D基本知识Direct3D绘制流水线Direct3D光照及材质Direct3D纹理基础Mesh网格示例程序在WorldWind球体中渲染图形,提纲,DirectXDirectX是由微软公司开发的一种多媒体编程接口,它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形的显示及其声音效果。目前很多游戏的开发都是使用DirectX.DirectX软件开发工具包(SDK)目前最高版本是DirectX11.,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(Vector3v,Matrixm),Direct3D基本知识,向量向量代表一个有方向和长度的对象,与坐标系原点无关,一般用Vector3结构表示。向量的运算点乘floatd=Vector3.Dot(Vector3v1,Vector3v2);叉乘Vector3v=Vector3.Cross(Vector3v1,Vector3v2);单位化Vector3.Normalize();长度Vector3.Length();夹角Vector3v1,v2;v1.Normalize();v2.Normalize();returnMath.Acos(Vector3.Dot(v1,v2);,Direct3D基本知识,法线法线是一个向量,对于平面来说它是垂直于平面的一个单位向量,一个平面的法线可以使用平行于该平面的两个向量的叉积计算得来。如假设一个三角面的三个顶点为V1,V2,V3则V12=V2-V1;V13=V3-V1;Vector3normal=Vector3.Cross(V12,V13);normal.Normalize();矩阵运算单位阵Matrix.Identity;逆矩阵Matrix.Invert(Matrixsource);,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等。MeshmeshObject;/定义一个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)PresentParameterspresentParams=newPresentParameters();/以窗口模式显示presentParams.Windowed=true;/后备缓存交换的方式,绘制完成后从内在清除presentParams.SwapEffect=SwapEffect.Discard;/允许使用自动深度测试presentParams.EnableAutoDepthStencil=true;/深度缓存单元为16位二进制数presentParams.AutoDepthStencilFormat=DepthFormat.D16;/实例化设备类对象drawArgs.LocalDevice=newDevice(0,DeviceType.Hardware,this,CreateFlags.SoftwareVertexProcessing,presentParams);,示例程序,设置变换矩阵(DirectXWindow.cs)/相机位置drawArgs.CameraPosition=newVector3(0,3,5);/相机目标位置drawArgs.CameraTarget=newVector3(0,0,0);/世界变换矩阵drawArgs.LocalDevice.Transform.World=Matrix.Identity;/观察矩阵drawArgs.LocalDevice.Transform.View=Matrix.LookAtLH(drawArgs.CameraPosition,drawArgs.CameraTarget,newVector3(0,1,0);/投影矩阵drawArgs.LocalDevice.Transform.Projection=Matrix.PerspectiveFovLH(float)Math.PI/4,this.Width/this.Height,0.1f,100);,示例程序,创建顶点缓冲(Lighting3DBox.cs)/实例化顶点缓冲m_vertexBuffer=newVertexBuffer(typeof(CustomVertex.PositionColored),8,drawArgs.LocalDevice,Usage.Dynamic|Usage.WriteOnly,CustomVertex.PositionColored.Format,Pool.Default);/定义PositionColored格式的顶点CustomVertex.PositionColoredverts=newCustomVertex.PositionColored8;verts0.Position=newVector3(3,2,0);/顶点位置verts0.Color=Color.Yellow.ToArgb();/顶点颜色verts7.Position=newVector3(4,1,0);/顶点位置verts7.Color=Color.Yellow.ToArgb();/顶点颜色/为顶点缓冲区填充数据m_vertexBuffer.SetData(verts,0,LockFlags.None);,示例程序,创建索引缓冲(Lighting3DBox.cs)/实例化索引缓冲m_indexBuffer=newIndexBuffer(typeof(int),36,drawArgs.LocalDevice,Usage.WriteOnly,Pool.Default);/定义索引intindices=newint0,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=newMaterial();/设置环
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多区域分布式缓存稳定性验收报告
- 新零售商品撮合微服务架构说明文档
- 异议客户安抚处理规范
- 贴片线短流程排程优化制度
- 猫咪保定防抓洗护操作指引
- 电镀线镀层厚度优化实施方案
- 猫绝育术前评估病历书写指引
- 低温季节机械润滑管理规范
- 视频直播延时回放回归测试方案
- 安全域权限变更审计规范
- 便利店商品陈列技巧
- 2024年四川省内江市中考英语试题(含答案)
- 2023年港澳台联考历史真题及答案
- 2024金融数据安全数据安全评估规范
- 护工术语和专业知识培训
- 耙斗装岩机操作规程培训
- 2023年湖南永州市中医医院招聘56人历年高频难易度、易错点模拟试题(共500题)附带答案详解
- 2×300MW火电厂电气一次部分设计
- 内科学教学课件:胃炎
- 职业教育学新编第三版知识点
- 酒店明住宿清单(水单)
评论
0/150
提交评论