关闭

关闭

关闭

封号提示

内容

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

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

C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 …

希望
2019-09-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程.pptppt》,可适用于高等教育领域

关于C#网络应用高级编程 教学课件 ppt 作者 马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程.ppt.ppt文档,吉林快3—吉林快三拥有内容丰富的相关文档,站内每天千位行业名人共享最新资料。

*第章三维设计与多媒体编程简单的D设计入门DirectX基础知识PrimitiveMash灯光与材质音频与视频*简单的D设计入门【例】使用DirectX设计一个的能够旋转的三角形并将本机显卡和显示器的相关参数显示出来。()新建一个名为SimpleDirectDExample的Windows应用程序使用默认的窗体名称。()在【解决方案资源管理器】中鼠标右键单击【引用】【添加引用】在【net】选项下同时选中MicrosoftDirectX、MicrosoftDirectXDirectD和MicrosoftDirectXDirectDX注意选择的版本要和本章开头列出的版本一致单击【确定】。()在名称空间的上方添加引用代码:usingMicrosoftDirectXusingMicrosoftDirectXDirectD*简单的D设计入门(续)()在构造函数上方添加字段声明:privateDevicedevice=privateVertexBuffervertexBuffer=privateMicrosoftDirectXDirectDFontddfontprivatestringadapterInformationStringprivateboolshowAdapterString=trueprivatefloatangle=fprivatefloatincrementAngle=fprivateboolenableRotator=true*()直接添加代码:publicboolInitializeGraphics(){try{PresentParameterspresentParams=newPresentParameters()*简单的D设计入门(续)presentParamsWindowed=truepresentParamsSwapEffect=SwapEffectDiscarddevice=newDevice(,DeviceTypeHardware,this,CreateFlagsSoftwareVertexProcessing,presentParams)returntrue}catch(DirectXException){returnfalse}}*简单的D设计入门(续)()在窗体的Load事件中添加代码:privatevoidFormLoad(objectsender,EventArgse){thisSetStyle(ControlStylesAllPaintingInWmPaint|ControlStylesOpaque,true)thisKeyPreview=trueadapterInformationString=F:显示隐藏提示信息nF:旋转不旋转n上箭头:提高转速n下箭头:降低转速nEsc:退出nnnAdapterDetailsadapterDetails=ManagerAdaptersDefaultInformationadapterInformationString=stringFormat(显卡驱动程序:{}n,adapterDetailsDriverName)adapterInformationString=stringFormat(显卡驱动程序版本:{}n,adapterDetailsDriverVersion)*简单的D设计入门(续)DisplayModedisplayMode=ManagerAdaptersDefaultCurrentDisplayModeadapterInformationString=stringFormat(显示器当前分辨率:{}X{}n,displayModeWidth,displayModeHeight)adapterInformationString=stringFormat(显示器当前颜色质量:{}n,displayModeFormat)adapterInformationString=stringFormat(显示器当前刷新频率(Hz):{}n,displayModeRefreshRate)SystemDrawingFontwinFont=newSystemDrawingFont(Arial,,FontStyleRegular)ddfont=newMicrosoftDirectXDirectDFont(device,winFont)ddfontPreloadText(adapterInformationString)vertexBuffer=newVertexBuffer(typeof(CustomVertexPositionColored),,device,UsageDynamic|UsageWriteOnly,CustomVertexPositionColoredFormat,PoolDefault)vertexBufferCreated=newEventHandler(OnVertexBufferCreate)OnVertexBufferCreate(vertexBuffer,)}*简单的D设计入门(续)()直接添加代码:privatevoidOnVertexBufferCreate(objectsender,EventArgse){锁定顶点缓冲定义顶点解除锁定。VertexBufferbuffer=(VertexBuffer)senderCustomVertexPositionColoredverts=(CustomVertexPositionColored)bufferLock(,)vertsPosition=newVector(f,f,f)vertsColor=ColorBlueVioletToArgb()vertsPosition=newVector(f,f,f)vertsColor=ColorGreenYellowToArgb()vertsPosition=newVector(f,f,f)vertsColor=ColorRedToArgb()bufferUnlock()}*简单的D设计入门(续)()添加设置矩阵参数的代码:privatevoidSetupCamera(){Vectorworld=newVector(angle,anglef,anglef)deviceTransformWorld=MatrixRotationAxis(world,angle)if(enableRotator){angle=incrementAngle(float)(MathPI)}floataspectRatio=floatnearPlane=floatfarPlane=floatfieldOfView=(float)MathPIfdeviceTransformProjection=MatrixPerspectiveFovLH(fieldOfView,aspectRatio,nearPlane,farPlane)*简单的D设计入门(续)VectorcameraPosition=newVector(,,)VectorcameraTarget=newVector(,,)VectorupDirection=newVector(,,)deviceTransformView=MatrixLookAtLH(cameraPosition,cameraTarget,upDirection)deviceRenderStateCullMode=CullNonedeviceRenderStateLighting=false}*简单的D设计入门(续)()在窗体的Paint事件中添加代码:privatevoidFormPaint(objectsender,PaintEventArgse){deviceClear(ClearFlagsTarget,SystemDrawingColorAliceBlue,f,)SetupCamera()deviceBeginScene()deviceVertexFormat=CustomVertexPositionColoredFormatdeviceSetStreamSource(,vertexBuffer,)deviceDrawPrimitives(PrimitiveTypeTriangleList,,)if(showAdapterString==true){ddfontDrawText(,adapterInformationString,,,ColorGreen)}deviceEndScene()devicePresent()if(WindowState!=FormWindowStateMinimized){thisInvalidate()}}*()添加窗体的KeyDown事件代码:privatevoidFormKeyDown(objectsender,KeyEventArgse){switch(eKeyCode){caseKeysEscape:thisClose()breakcaseKeysF:showAdapterString=!showAdapterStringbreakcaseKeysF:enableRotator=!enableRotatorbreak*简单的D设计入门(续)caseKeysUp:if(enableRotator){incrementAngle=f}breakcaseKeysDown:if(enableRotatorincrementAnglef){incrementAngle=f}break}}*简单的D设计入门(续)()修改Programcs中的Main方法为如下代码:staticvoidMain(){ApplicationEnableVisualStyles()ApplicationSetCompatibleTextRenderingDefault(false)Formfrm=newForm()*简单的D设计入门(续)if(frmInitializeGraphics()==false){MessageBoxShow(显卡不支持D或者未安装配套的显卡驱动程序!)return}ApplicationRun(frm)}*DirectX基础知识左手坐标系与右手坐标系D系统中的每一个点都由xyz三个值组成。一般情况下x轴的正方向向右y轴的正方向向上。然后根据z轴的正方向划分为两种坐标系如果z轴正方向向远离观察者而去的方向即朝着屏幕里面的方向这种坐标系叫左手坐标系反之叫做右手坐标系。DirectD默认使用左手坐标系。在DirectD中用Vector表示一个三维向量例如:Vectora=newVector(,,)*设备一台计算机中至少有一个Device对象在MnagedDirectD里可以控制任意多个Device对象。所有三维图形图像等信息均可以通过Device对象处理该类常用的构造函数为:publicDevice(intadapter,DeviceTypedeviceType,ControlrenderWindow,CreateFlagsbehaviorFlags,PresentParameterspresentationParameters)*DirectX基础知识(续)顶点与顶点缓冲在数学上一般只需要描述点的位置但是在DirectD中除了点的位置外还需要保存该点的颜色以及法线(Normal)、纹理(Texture)等其它信息为了与数学上一般的点区分DirectD把坐标系中的每一个点称之为顶点(Vertex)。顶点缓冲指在显存或内存中开辟的用于保存顶点的缓冲区。顶点缓冲可以保存任何的顶点类型。将顶点保存在顶点缓冲区中后显卡就可以根据提供的参数对其进行各种变换、绘制等操作。*DirectX基础知识(续)创建顶点缓冲的常用形式为:publicVertexBuffer(TypetypeVertexType,intnumVerts,Devicedevice,Usageusage,VertexFormatsvertexFormat,Poolpool)其中:typeVertexTypeVertexTypemdashmdash:指定要创建的顶点类型。该值可以是CustomVertex类中的顶点结构类型也可以是自定义的顶点类型numVerts:顶点个数。device:使用的显卡对象。usage:如何使用顶点缓冲。vertexFormat:定义储存在顶点缓冲中的顶点格式。pool:定位顶点缓冲使用的内存池位置。*DirectX基础知识(续)Mash对象有了顶点再通过顶点之间封闭的连线就可以构成面了。任何一个物体不论是表面多么平滑的物体其视图都可以用三角形构成的面组合得到。如果只画出三角形的连线可以看出一个物体的框架是由许多个三角形构成的网格组成DirectD把由三角形网格组成的对象叫做Mesh对象。*法线在数学上法线(Normal)指垂直于面的向量。在DirectD中每个顶点也都可以有对应的法线而且还可以设置每个顶点法线的方向。顶点法线和面法线对计算光照以及着色模式(Shadingmode)非常重要。面法线一般用于Flat着色得到物体的立体感效果而顶点法线则一般用于Gouraud着色用于控制光照及纹理使物体看起来很圆滑。*DirectX基础知识(续)纹理与纹理映射在世纪年代和年代初的D程序中很多物体的外表看起来都是发亮的塑胶质感的样子感觉很不真实。在DirectD中使用纹理(Texture)可以轻松地解决这个问题甚至物体很小的细节部分例如子弹孔、不规则表面、生锈的部分、裂缝、指纹、钉在木钢板上的图钉等等都可以通过纹理实现。通过纹理还可以将一幅图贴在几何体的表面提供复杂的视觉效果。从一般概念上讲纹理指由各种色彩的像素构成的简单位图。但是在DirectD中纹理则指可以映射到一个或者多个面上的特殊的图像。把纹理映射到目标几何体上的过程叫纹理映射(TextureMapping)。因为纹理是二维的所以仅需要两个坐标值:u和v。u是横向坐标值v是纵向坐标值u和v的取值应该在和之间左上角是(),右下角是()。*DirectX基础知识(续)世界矩阵、投影矩阵与视图矩阵矩阵是由数字组成的矩形数组矩阵中的每个元素都有一个数字或表达式。通过矩阵的加减乘除运算可以对D对象中的顶点进行移动、旋转、缩放等操作。在DirectX中每个矩阵都由行列组成。构造一个向量前必须先构造一个变换矩阵。将一个times的矩阵乘以一个表示D数据的向量比如与一个顶点向量相乘即得到新的变换后的向量。*如果需要进行一系列变换可以为每一个动作(缩放、旋转、平移)各创建一个临时矩阵然后对向量分别进行相应的变换还有一个办法就是先将这些矩阵相乘然后把乘积的结果作为变换矩阵。为了简化编程DirectX中已经分别提供了缩放、旋转、平移等方法我们只需要调用这些方法得到变换后的向量即可。完成既缩放又旋转这类复合变换则需要两个矩阵:一个用来旋转一个用来缩放然后把两个矩阵相乘得到一个新的复合矩阵最后利用这个新的矩阵来变换顶点。*DirectX基础知识(续)背面剔除所有的几何形状都可以由三角形顶点构成的面组成。背面剔除(BackfaceCulling)的实际含义就是如何渲染每一个由顶点按照顺时针或逆时针方向依次连线构成的三角形面。剔除方式有三种:一种是不剔除即全部渲染第二种方式是剔除顺时针构成的面第三种方式是剔除逆时针构成的面。如果不设定剔除方式DirectD默认剔除逆时针方向构成的面即只渲染按顺时针方向排列的顶点构成的三角形面。*PrimitivePointList:点列。顶点序列中的每个顶点均单独绘制。LineList:线列。绘制时顶点序列中的每两个顶点作为一组连成一条单独的直线序列中的每个顶点只使用一次。LineStrip:线带。绘制时从第一个顶点开始依次将顶点序列中的各个顶点用直线连接起来。除第一个顶点和最后一个顶点只使用一次外中间的其它顶点均使用两次。TrangleList:三角形列。绘制时顶点序列中的每三个顶点作为一组组成一个单独的三角形序列中的每个顶点只使用一次。TrangleStrip:三角形带。绘制的结果为一系列相连的三角形每两个相邻的三角形共享两个顶点。TrangleFan:三角扇形。与三角形带相似不过所有的三角形都共享一个顶点。*Primitive(续)()新建一个名为PrimitiveExample的Windows应用程序使用默认的窗体名称。()在【解决方案资源管理器】中鼠标右键单击【引用】【添加引用】在【net】选项下同时选中MicrosoftDirectX、MicrosoftDirectXDirectD和MicrosoftDirectXDirectDX注意选择的版本要和本章开头列出的版本一致单击【确定】。()在名称空间的上方添加引用代码:usingMicrosoftDirectXusingMicrosoftDirectXDirectD*Primitive(续)()在构造函数上方添加字段声明:privateDevicedevice=privateVertexBuffervertexBuffer=privateconstintvertexNumber=privatestringprimitivesType=点列privateMicrosoftDirectXDirectDFontddfontprivatestringhelpStringprivateboolshowHelpString=trueprivatefloatangle=fprivateboolenableRotator=falseprivateintrotatorXYZ=privateboolenableCullMode=false*()直接添加代码:publicboolInitializeGraphics(){PresentParameterspresentParams=newPresentParameters()presentParamsWindowed=truepresentParamsSwapEffect=SwapEffectDiscarddevice=newDevice(,DeviceTypeHardware,this,CreateFlagsSoftwareVertexProcessing,presentParams)returntrue}*Primitive(续)()在窗体的Load事件中添加代码:privatevoidFormLoad(objectsender,EventArgse){thisSetStyle(ControlStylesAllPaintingInWmPaint|ControlStylesOpaque,true)thisKeyPreview=trueSystemDrawingFontwinFont=newSystemDrawingFont(宋体,,FontStyleRegular)ddfont=newMicrosoftDirectXDirectDFont(device,winFont)ddfontPreloadText(helpString)vertexBuffer=newVertexBuffer(typeof(CustomVertexPositionColored),vertexNumber,device,UsageDynamic|UsageWriteOnly,CustomVertexPositionColoredFormat,PoolDefault)vertexBufferCreated=newEventHandler(OnVertexBufferCreate)OnVertexBufferCreate(vertexBuffer,)}*Mash【例】演示Mesh对象的绘制方法。()新建一个名为MeshExample的Windows应用程序使用默认的窗体名称。()在【解决方案资源管理器】中鼠标右键单击【引用】【添加引用】在【net】选项下同时选中MicrosoftDirectX、MicrosoftDirectXDirectD和MicrosoftDirectXDirectDX注意选择的版本要和本章开头列出的版本一致单击【确定】。()在名称空间的上方添加引用代码:usingMicrosoftDirectXusingMicrosoftDirectXDirectD*Mash(续)()直接添加代码:publicboolInitializeGraphics(){PresentParameterspresentParams=newPresentParameters()presentParamsWindowed=truepresentParamsSwapEffect=SwapEffectDiscarddevice=newDevice(,DeviceTypeHardware,this,CreateFlagsSoftwareVertexProcessing,presentParams)returntrue}()在窗体的Load事件中添加代码:privatevoidFormLoad(objectsender,EventArgse){thisSetStyle(ControlStylesAllPaintingInWmPaint|ControlStylesOpaque,true)thisKeyPreview=true}*灯光与材质光的类型在DirectX中有四种类型的光分别是环境光、直射光、点光源和聚光灯。三种类型的光中均有以下两种属性:Diffuse属性:表示漫射光颜色是一种有方向的光其方向就是Direction属性指定的方向。例如:deviceLightsDiffuse=ColorWhiteAmbient属性:环境光颜色是一种无方向的光例如:deviceLightsAmbient=ColorBlack除了以上两种颜色外对不同类型的灯光还需要设置与类型相关的其它属性。*)直射光直射光有方向没有位置也没有范围和衰减。场景中的所有对象都会从同样的方向接收到同样的直射光。一般情况下只需要为直射光设置Direction属性例如:deviceLightsDirection=newVector(,,)该语句的意思是设置首个直射光的方向为z轴正方向。*灯光与材质(续))点光源点光源没有方向但是有光照范围有光的衰减。例如灯泡发出的光就可以认为是点光源。一般情况下只需要为点光源设置位置属性例如:deviceLightsPosition=newVector(,,)该语句的意思是设置首个点光源的位置为世界坐标的原点。*)聚光灯聚光灯有位置、方向、范围、发光内径和发光外径光照强度还会随距离而衰减。聚光灯的恰当的例子就是手电筒或者剧场里用来照亮舞台上人物的灯光。*灯光与材质(续)材质材质(Material)用于描述物体的反光性能使它的表面看起来有没有光泽和带有什么颜色。可以认为材质的颜色就是人们在自然界中看到的物体的颜色。在不同类型的光照射下使用的材质不同物体反射的光也不同。例如如果把红色的灯光照在淡蓝色的表面上它就会呈献出柔和的紫色。*描述材质的常见属性有:Diffuse:物体的漫反射色如果灯光为白色则漫反射色就是灯光照射部分物体的颜色。Ambient:物体的环境反射色如果环境色为白色反射色为非黑色的其它颜色则物体的颜色由环境反射色决定。Specular:物体的镜面反射与高光强度。设用这个属性可以使物体看起来发亮。Emission:物体自发光颜色。【例】灯光、材质、Primitive和Mesh综合举例。*音频与视频【例】制作一个音频视频播放器具有播放、暂停、停止等功能。

类似资料

该用户的其他资料

2015.11创新杯创新杯说课大赛国赛说课课件.ppt

19--课程..创新杯说课大赛国赛说课课件.ppt

2014创新杯直线的倾斜角与斜率课程创新杯说课大赛国赛说课课件.ppt

13幼师3 住创新杯说课大赛国赛说课课件.ppt

2010血栓的形成讲课曹颜冬创新杯说课大赛国赛说课课件.ppt

职业精品

精彩专题

让你惊艳又清新的英文短诗合集

让你清新惊艳的英文小诗有哪些呢?小编汇集了以下经典英文诗、唯美爱情小诗、英文诗押韵技巧等等,让爱好英文短诗的你能够一起体验其中的乐趣!

用户评论

0/200
上传我的资料

热门资料排行换一换

  • 总部员工晋升、晋级、降级、降职实施…

  • 逆变电源的设计

  • 图形学实验一Visual C 图…

  • 电刷镀工艺

  • Flash鼠绘实例教程:牛年画只可…

  • 模联扫会议记录等核心资料

  • 第三课 中华文明之祖

  • 浅谈出纳工作常见差错分析及职业修养

  • 认知与协作视角下无线通信网络之若干…

  • 资料评价:

    / 39
    所需积分:0 立即下载

    VIP

    在线
    客服

    免费
    邮箱

    吉林快3—吉林快三服务号

    扫描关注领取更多福利