C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程

上传人:E**** 文档编号:89370538 上传时间:2019-05-24 格式:PPT 页数:39 大小:142KB
返回 下载 相关 举报
C#网络应用高级编程 教学课件 ppt 作者  马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程_第1页
第1页 / 共39页
C#网络应用高级编程 教学课件 ppt 作者  马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程_第2页
第2页 / 共39页
C#网络应用高级编程 教学课件 ppt 作者  马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程_第3页
第3页 / 共39页
C#网络应用高级编程 教学课件 ppt 作者  马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程_第4页
第4页 / 共39页
C#网络应用高级编程 教学课件 ppt 作者  马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程》由会员分享,可在线阅读,更多相关《C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程(39页珍藏版)》请在金锄头文库上搜索。

1、第7章 三维设计与多媒体编程,7.1 简单的3D设计入门 7.2 DirectX基础知识 7.3 Primitive 7.4 Mash 7.5 灯光与材质 7.6 音频与视频,7.1 简单的3D设计入门,【例】使用DirectX设计一个的能够旋转的三角形,并将本机显卡和显示器的相关参数显示出来。 (1) 新建一个名为SimpleDirect3DExample的Windows应用程序,使用默认的窗体名称。 (2) 在【解决方案资源管理器】中,鼠标右键单击【引用】【添加引用】在【.net】选项下同时选中Microsoft.DirectX、Microsoft.DirectX.Direct3D和Mic

2、rosoft.DirectX.Direct3DX,注意选择的版本要和本章开头列出的版本一致,单击【确定】。 (3) 在名称空间的上方,添加引用代码: using Microsoft.DirectX; using Microsoft.DirectX.Direct3D;,(4) 在构造函数上方添加字段声明: private Device device = null; private VertexBuffer vertexBuffer = null; private Microsoft.DirectX.Direct3D.Font d3dfont; private string adapterInfo

3、rmationString; private bool showAdapterString = true; private float angle = 0.0f; private float incrementAngle = 0.1f; private bool enableRotator = true;,7.1 简单的3D设计入门 (续),(5) 直接添加代码: public bool InitializeGraphics() try PresentParameters presentParams = new PresentParameters();,7.1 简单的3D设计入门 (续),pr

4、esentParams.Windowed = true; presentParams.SwapEffect = SwapEffect.Discard; device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); return true; catch (DirectXException) return false; ,7.1 简单的3D设计入门 (续),(6) 在窗体的Load事件中添加代码: private void Form1_Load(obje

5、ct sender, EventArgs e) this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); this.KeyPreview = true; adapterInformationString = “F1:显示/隐藏提示信息n“ + “:旋转/不旋转n“ + “上箭头:提高转速n“ + “下箭头:降低转速n“ + “:退出nnn“; AdapterDetails adapterDetails = Manager.Adapters.Default.Information; adapte

6、rInformationString += string.Format( “显卡驱动程序:0n“, adapterDetails.DriverName); adapterInformationString += string.Format( “显卡驱动程序版本:0n“, adapterDetails.DriverVersion);,7.1 简单的3D设计入门 (续),DisplayMode displayMode = Manager.Adapters.Default.CurrentDisplayMode; adapterInformationString += string.Format( “

7、显示器当前分辨率:0 X 1n“, displayMode.Width, displayMode.Height); adapterInformationString += string.Format( “显示器当前颜色质量:0n“, displayMode.Format); adapterInformationString += string.Format( “显示器当前刷新频率(Hz):0n“, displayMode.RefreshRate); System.Drawing.Font winFont = new System.Drawing.Font(“Arial“, 9, FontSty

8、le.Regular); d3dfont = new Microsoft.DirectX.Direct3D.Font(device, winFont); d3dfont.PreloadText(adapterInformationString); vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 3, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default); vertexBuff

9、er.Created += new EventHandler(OnVertexBufferCreate); OnVertexBufferCreate(vertexBuffer, null); ,7.1 简单的3D设计入门 (续),(7) 直接添加代码: private void OnVertexBufferCreate(object sender, EventArgs e) /锁定顶点缓冲定义顶点解除锁定。 VertexBuffer buffer = (VertexBuffer)sender; CustomVertex.PositionColored verts = (CustomVertex

10、.PositionColored)buffer.Lock(0, 0); verts0.Position = new Vector3(0.0f, 1.0f, 1.0f); verts0.Color = Color.BlueViolet.ToArgb(); verts1.Position = new Vector3(-1.0f, -1.0f, 1.0f); verts1.Color = Color.GreenYellow.ToArgb(); verts2.Position = new Vector3(1.0f, -1.0f, 1.0f); verts2.Color = Color.Red.ToAr

11、gb(); buffer.Unlock(); ,7.1 简单的3D设计入门 (续),(8) 添加设置矩阵参数的代码: private void SetupCamera() Vector3 world = new Vector3(angle, angle / 2.0f, angle / 4.0f); device.Transform.World = Matrix.RotationAxis(world, angle); if (enableRotator) angle += incrementAngle / (float)(Math.PI); float aspectRatio = 1; floa

12、t nearPlane = 1; float farPlane = 100; float fieldOfView = (float)Math.PI / 4.0f; device.Transform.Projection = Matrix.PerspectiveFovLH(fieldOfView, aspectRatio, nearPlane, farPlane);,7.1 简单的3D设计入门 (续),Vector3 cameraPosition = new Vector3(0, 0, -5); Vector3 cameraTarget = new Vector3(0, 0, 0); Vecto

13、r3 upDirection = new Vector3(0, 1, 0); device.Transform.View = Matrix.LookAtLH(cameraPosition, cameraTarget, upDirection); device.RenderState.CullMode = Cull.None; device.RenderState.Lighting = false; ,7.1 简单的3D设计入门 (续),(9) 在窗体的Paint事件中添加代码: private void Form1_Paint(object sender, PaintEventArgs e)

14、device.Clear(ClearFlags.Target, System.Drawing.Color.AliceBlue, 1.0f, 0); SetupCamera(); device.BeginScene(); device.VertexFormat = CustomVertex.PositionColored.Format; device.SetStreamSource(0, vertexBuffer, 0); device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1); if (showAdapterString = true)

15、d3dfont.DrawText(null, adapterInformationString, 25, 30, Color.Green); device.EndScene(); device.Present(); if (WindowState != FormWindowState.Minimized) this.Invalidate(); ,(10) 添加窗体的KeyDown事件代码: private void Form1_KeyDown(object sender, KeyEventArgs e) switch (e.KeyCode) case Keys.Escape: this.Clo

16、se(); break; case Keys.F1: showAdapterString = !showAdapterString; break; case Keys.F2: enableRotator = !enableRotator; break;,7.1 简单的3D设计入门 (续),case Keys.Up: if (enableRotator) incrementAngle += 0.01f; break; case Keys.Down: if (enableRotator ,7.1 简单的3D设计入门 (续),(11) 修改Program.cs中的Main方法为如下代码: static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(fa

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号