




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 VB.Net的DirectX程序设计,6.1 DirectX简介,为了使得各种语言都能开发DirectX,尤其是支持.Net托管框架。微软发布了托管版本的Managed DirectX SDK。 Managed DirectX 实质上是对DirectX进行了一个轻量级的封装。一方面使它供.NET 平台下的其他语言调用 (如C#);另一方面对DirectX程序编写进行了进一步简化。 Managed DirectX所支持的托管代码语言: Microsoft Visual C# Microsoft Visual Basic.NET Microsoft Visual C+ Microsoft JScript.NET,6.2 第一个DirectX程序,6.2.1 配置环境 6.2.2 新建项目 6.2.3 添加新窗体 6.2.4 添加引用 6.2.5 Device类及初始化 6.2.6 定义渲染函数 6.2.7 定义运行的事件过程 6.2.8 设置启动窗体,6.3 绘制一个三角形,通过Direct3D绘制的每个对象都是有三角形组成的,一个三角形由三个点组成,而每个点都定义成一个向量来指定点的X、Y和Z坐标。DirectX中有一种定义顶点的结构,那就是CustomVertex类。,6.4 绘制基本图元,6.5 摄像机基础,三个空间:世界空间(world space)、摄像机空间(camera space)和模型空间(model space)。 三个变换: 视图变换( View Transformation)、世界变换(World Transformation)和投影变换(Projection Transformation)。,6.5.1 定义视图变换,使用Matrix.LookAtLH或Matrix.LookAtRH来创建一个视图矩阵,用于表示摄像机位置和摄像机目标位置,其中Matrix.LookAtLH用于创建左手法则的视图矩阵,Matrix.LookAtRH用于创建右手法则的视图矩阵。 Dim viewMatrix As Matrix = Matrix.LookAtLH(eye, at, up),6.5.2 定义投影变换,使用Matrix.PerspectiveFovLH或Matrix.PerspectiveFovRH创建一个基于视场(FOV)的投影变换,其中PerspectiveFovLH用于创建左手法则的投影矩阵,PerspectiveFovRH用于创建右手法则的投影矩阵。,Dim projection As Matrix = Matrix.PerspectiveFovLH(Math.PI / 4, Me.Width / Me.Height, 1.0F, 50.0F),6.5.3 设置绘图设备投影及视图矩阵,device.Transform.Projection = projection device.Transform.View = viewMatrix,6.5.4 绘制三角形,采用PositionColored形式来定义顶点。 Dim vertices(3) As CustomVertex.PositionColored 定义顶点 vertices(0).Position = New Vector3(0.0F, 0.0F, 0.0F) vertices(0).Color = Color.Red.ToArgb() vertices(1).Position = New Vector3(10.0F, 0.0F, 0.0F) vertices(1).Color = Color.Green.ToArgb() vertices(2).Position = New Vector3(5.0F, 10.0F, 0.0F) vertices(2).Color = Color.Yellow.ToArgb() device.VertexFormat = CustomVertex.PositionColored.Format device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices) 取消反面消隐 device.RenderState.CullMode=Cull.None 关闭灯光,使用点颜色 device.RenderState.Lighting = False,6.5.5 显示线框,device.RenderState.FillMode=FillMode.WireFrame,6.6 输入事件,键盘和鼠标作为一种输入设备,在DirectX中也有相应的类用于表示这类输入设备,那就是Microsoft.DirectX.DirectInput.Device 6.6.1 键盘输入 6.6.2 鼠标输入,6.7 摄像机变换,6.7.1 准备场景 Public Sub SetUpCamera() 摄像机 device.Transform.Projection = Matrix.PerspectiveFovLH(Math.PI / 4, Me.Width / Me.Height, 0.3F, 500.0F) device.Transform.View = Matrix.LookAtLH(New Vector3(0, 0, -30), New Vector3(0, 0, 0), New Vector3(0, 1, 0) End Sub,6.7.2 旋转摄像机 Dim CamraPosition As Vector3 = New Vector3(0, 0, -30) 摄像机的位置 Dim CamraTarget As Vector3 = New Vector3(0, 0, 0) 定义摄像机目标位置 Dim angleY As Single = 1.75 定义旋转角度量 Public Sub SetUpCamera() 摄像机 device.Transform.View = Matrix.LookAtLH(CamraPosition, CamraTarget, New Vector3(0.0F, 1.0F, 0.0F) 观察变换矩阵 device.Transform.Projection = Matrix.PerspectiveFovLH(CSng(Math.PI) / 4, 1.0F, 1.0F, FarZ) 投影变换 End Sub 如果在程序中定义: CamraPosition.TransformCoordinate(Matrix.RotationAxis(New Vector3(0, 1, 0), angleY),6.7.3 键盘控制摄像机旋转 通过键盘输入的Left键和Right键来控制摄像机的绕着Y轴旋转,UP和Down键控制像机绕着X轴旋转。可以通过直接添加窗体的KeyDown事件处理过程来实现。 Select Case e.KeyCode Case Keys.Left m_CamraPosition.TransformCoordinate(Matrix.RotationAxis(New Vector3(0, 1, 0), -0.1) Render() Case Keys.Right End Select,6.7.4 键盘控制摄像机缩放 摄像机缩放主要设置摄像机与目标的位置距离即可实现。 Select Case e.KeyCode Case Keys.W m_CamraPosition.Z += 1 Render() Case Keys.Z m_CamraPosition.Z -= 1 Render() End Select,6.8 材质、贴图与灯光,在三维场景中,材质、贴图和灯光是必不可少的组成部分,材质用于决定光线如何影响物体的表面,贴图使得物体表面显得更加真实,灯光则直接影响到场景的逼真度和渲染效果。,6.8.1 材质 我们通常看到的物体表面颜色都是灯光颜色在物体上经过反射得到的颜色,物体的材质决定了它与光线交互的方式。在DirectX中提供了一个Material结构用于描述物体表面对外界光线的处理方式,这个结构主要有如下属性:环境光(Ambient)、漫反射光(Diffuse)、自发光(Emissive)、反射光(Specular)和反射高光清晰度(SpecularSharpness)。,6.8.2 贴图 当采用DrawIndexedPrimitives等绘图函数绘制三角形序列时,定义顶点数据类型时需要定义成CustomVertex.PositionTextured类型,初始化顶点并设置顶点坐标时,对应设置其贴图坐标。 使用TextureLoader.FromFile()方法导入外部的贴图文件,在渲染函数中绘制该三角形之前设置其对应的贴图对象为绘图设备的当前贴图,同时设置绘图设备的顶点格式为CustomVertex.PositionTextured类型,最后绘制三角形。,6.8.3 灯光 在DirectX中有三种类型的光源,即点光源(pointlight)、平行光(directionallight)和聚光灯(spotlight)。 在DirectX中提供Light类用于表示灯光对象。 通过绘图设备Device的Lights属性可以设置或获取场景的灯光,通过Device对象的RenderState.Ambient属性还可以设置环境色。,1)点光源 点光源的类型为LightType.Point。在使用点光源时,至少要为点光源对象设置灯光类型(Type)、漫反射(Diffuse,默认为白色)、位置(Position,默认为坐标(0,0,0)、距离(Range,默认为0)、衰减方式(Attenuation)及其是否可用(Enabled)等属性,方向属性(Direction)对于点光源对象不起作用。,2)平行光 平行光的类型为LightType.Directional。在使用平行光时,至少要为平行光对象设置灯光类型(Type)、漫反射(Diffuse,默认为白色)、方向(Direction,默认为(0,0,1)方向)及其是否可用(Enabled)等属性,位置属性(Position)对于平行光对象不起作用。,3)聚光灯 聚光灯的类型为LightType.Point。在使用聚光灯时,至少要为聚光灯对象设置灯光类型(Type)、漫反射(Diffuse,默认为白色)、位置(Position,默认为坐标(0,0,0)、方向(Direction,默认为(0,0,1)方向)、距离(Range,默认为0)、衰减方式(Attenuation)、内部锥角度(InnerConeAngle,默认为0)、外部锥角度(OuterConeAngle,默认为0)及其是否可用(Enabled)等属性,方向属性(Direction)对于聚光灯对象不起作用。,6.9 Mesh网格,在DirectX中,几何模型对象基本上都是通过Mesh来表示,它也是组成三维场景的基本元素之一。创建网格的基本方法主要有四种,即从文件导入、从现有网格、使用形状创建功能以及使用Mesh构造函数来创建。,6.9.1 创建基本几何体网格 在DirectX中提供了一些基本方法用于创建基本几何体: Mesh.Box Mesh.Cylinder Mesh.Polygon Mesh.Sphere Mesh.Teapot Mesh.Torus,6.9.2 从文件导入Mesh Mesh类提供了三种从外部数据导入到网格的方法,即FromFile()、FromStream()和FromX(),其中FromFile()方法为从一个X文件导入网格,FromStream()方法为从一个数据流导入网格,FromX()方法为从一个XfileData对象导入网格。 从X文件导入网格 meshObj = Mesh.FromFile(“tiny.X“, MeshFlags.SystemMemory, device) material = New Material() material.Ambient = Color.White 设置环境光 material.Diffuse = Color.Gray 设置漫反射,6.9.3 导入X文件的贴图 Dim i As Integer For i = 0 To materials.Length - 1 meshMaterials(i) = materials(i).Material3D meshMaterials(i).Ambient = meshMaterials(i).Diffuse 创建贴图 meshTextures(i) = TextureLoader.FromFile(device, “ + materials(i).TextureFilename) Next,6.9.4 将Mesh导出为X文件 在DirectX中Mesh类提供了Save()方法用于将网格以TXT格式或二进制格式存储。 Public Sub SaveToXFile() 定义衔接关系 Dim adjacency(meshObj.NumberFaces * 3) As Integer meshObj.GenerateAdjacency(0.01F, adjacency) 定义材质属性 Dim exmaterials(meshMaterials.Length) As ExtendedMaterial 设置材质 Dim i As Integer For i = 0 To meshMaterials.Length - 1 exmaterials(i).Material3D = meshMaterials(i) exmate
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 包头职业技术学院《电影艺术解析视与听》2023-2024学年第二学期期末试卷
- 武汉光谷职业学院《C#程序语言设计》2023-2024学年第二学期期末试卷
- 江西工程职业学院《钢结构课程设计》2023-2024学年第二学期期末试卷
- 滇西应用技术大学《生物医学光学》2023-2024学年第二学期期末试卷
- 广西安全工程职业技术学院《建筑物抗震设计》2023-2024学年第二学期期末试卷
- 云南旅游职业学院《vc程序设计》2023-2024学年第二学期期末试卷
- 新生儿疾病筛查健康教育
- 江西理工大学《新闻节目播音主持》2023-2024学年第二学期期末试卷
- 吉林农业科技学院《计算机组成原理与汇编语言程序设计》2023-2024学年第二学期期末试卷
- 广东建设职业技术学院《网络及其计算》2023-2024学年第二学期期末试卷
- 2.6.2数列求和公开课一等奖课件省赛课获奖课件
- 公司道德和商业行为准则
- 【年产1000吨富硒沙棘果汁工艺生产设计16000字(论文)】
- 2024年湖南高二学业水平合格性考试英语试卷试题(含答案详解)
- 汽车维修合作协议书范本
- HG-T 4062-2023 波形挡边输送带
- 中等职业学校信息技术课程标准(2020年版)(文本精排版)
- 提水试验过程及数据处理
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
- 呼吸系统(0001)课件
- 2023年第37届中国化学奥林匹克竞赛(江苏赛区)初赛真题(学生版+解析版)
评论
0/150
提交评论