ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:44.46KB ,
资源ID:20066128      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20066128.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Visual C++游戏开发笔记二十九 一步一步教你用优雅的Direct3D11代码画一个三角形Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Visual C++游戏开发笔记二十九 一步一步教你用优雅的Direct3D11代码画一个三角形Word格式文档下载.docx

1、11. virtualTriangleDemo(12. 13. boolLoadContent(14. 15. voidUnloadContent(16. 17. Update(floatdt18. 19. Render(20. 21. private:22. 23. ID3D11VertexShader*solidColorVS_;24. 25. ID3D11PixelShader*solidColorPS_;26. 27. ID3D11InputLayout*inputLayout_;28. 29. ID3D11Buffer*vertexBuffer_;30. 31. ;顶点我们采用一个简

2、单的三分量式的浮点型结构体,在XNA Math library中一个叫做XMFLOAT3的结构体可以胜任这项殊荣。接下来,开始丰富我们的TriangleDemo类,我们在代码段二中书写顶点结构体VertexPos和TriangleDemo的类的构造函数以及析构函数代码段二 TriangleDemo 顶点结构体, 构造函数和析构函数.TriangleDemo.h3. #include5. structVertexPos7. XMFLOAT3pos;11. ;13. TriangleDemo:)solidColorVS_(0),solidColorPS_(15. inputLayout_(vert

3、exBuffer_(17. 19. 21. TriangleDemo:23. 25. 下面继续丰富我们的TriangleDemo类,在代码段三中我们进行UnloadContent函数的书写,顾名思义,UnloadContent是进行unload content工作的,与后面将书写的LoadContent函数相对应。代码段三 TriangleDemo类的UnloadContent函数的书写1. voidTriangleDemo:3. 5. if(solidColorVS_solidColorVS_-Release(7. solidColorPS_solidColorPS_-inputLayout

4、_inputLayout_-vertexBuffer_vertexBuffer_-=0;21. 顺理成章的,下一步便是LoadContent函数的书写。这个函数由顶点着色器载入,在文件SolidGreenColor.fx中可以查看。一旦顶点着色器的源代码编译完成,着色器便创建一个CreateVertexShader函数的调用,我们接着创建顶点格式。由于顶点着色器与顶点格式相关联,所以我们还需要将顶点着色器加载到内存中。创建完顶点着色器和输入格式后,下一步我们创建像素着色器。下面这段代码实现了LoadContent方法的一半的功能:代码段四 LoadContent函数着色器载入代码1. bool

5、ID3DBlob*vsBuffercompileResultCompileD3DShader(SolidGreenColor.fx,VS_Mainvs_4_0&=falseMessageBox(0,载入顶点着色器错误!编译错误MB_OKreturnfalse;21. HRESULTd3dResult;d3dResultd3dDevice_-CreateVertexShader(vsBuffer-GetBufferPointer(25. ),27. vsBuffer-GetBufferSize(29. if(FAILED(31. 32. 33. 34. 35. 36. 37. 38. 39. 4

6、0. 41. D3D11_INPUT_ELEMENT_DESCsolidColorLayout42. 43. 44. 45. POSITIONDXGI_FORMAT_R32G32B32_FLOAT,46. 47. D3D11_INPUT_PER_VERTEX_DATA,48. 49. ;50. 51. unsignedinttotalLayoutElementsARRAYSIZE(solidColorLayout52. 53. d3dResultCreateInputLayout(solidColorLayout,54. 55. totalLayoutElements,56. 57. vsBu

7、ffer-58. 59. vsBuffer-60. 61. if(62. 63. 64. 65. 66. 67. 68. 69. ID3DBlob*psBuffer70. 71. compileResult72. 73. PS_Mainps_4_074. 75. if(76. 77. 78. 79. 载入像素着色器错误!80. 81. 82. 83. 84. 85. d3dResultCreatePixelShader(psBuffer-86. 87. psBuffer-88. 89. psBuffer-90. 91. if(92. 93. 94. 95. 96. 97. 98. 99. .1

8、00. 101. /后接函数的下半段102. 103. CompileD3DShader相关的代码在代码段五中进行了演绎,这段代码巧妙地被分离于LoadContent之外,这样在加载多个不同的着色效果的时候便可以避免大段大段的冗余代码:代码段五 CompileShader 函数的实现方法Dx11DemoBase:char*filePath,entry,3. shaderModel,ID3DBlob*bufferDWORDshaderFlagsD3DCOMPILE_ENABLE_STRICTNESS;#ifdefined(DEBUG|_DEBUG|=D3DCOMPILE_DEBUG;#endif

9、errorBufferresult;resultD3DX11CompileFromFile(shaderModel,shaderFlags,buffer,errorBuffer,!31. OutputDebugStringA()errorBuffer-errorBuffer-39. 41. 43. 45. true;47. 上面我们介绍了上半段LoadContent函数的构成,而下半段LoadContent函数主要实现了顶点缓存的创建。这段代码行文思路很明朗,首先定义一个简单的三角形,沿X轴与Y轴都是0.5f(半个单位的长度)。Z轴依然设为为0.5f,来使此三角形可见。因为若镜头隔表面太近或者

10、太远,表面都不会成功的渲染。顶点列表存储于一个叫做vertices的数组中,它提供了一个子资源数据,在CreateBuffer函数开始调用进行实际顶点缓存的创建的时候,这些数据可以派上用场。下面就是上面这段叙述的代码实现,LoadContent函数的下半部分书写风格如下:代码段六 LoadContent函数的几何图形载入代码5. /前接函数的上半段9. .verticesXMFLOAT3(0.5f,0.5f-0.5f,;D3D11_BUFFER_DESCvertexDesc;ZeroMemory(vertexDesc,sizeof(vertexDescvertexDesc.UsageD3D11

11、_USAGE_DEFAULT;vertexDesc.BindFlagsD3D11_BIND_VERTEX_BUFFER;vertexDesc.ByteWidth*3;D3D11_SUBRESOURCE_DATAresourceData;resourceData,resourceDataresourceData.pSysMemvertices;CreateBuffer(49. 51. 53. 二、渲染几何体Direct11三角形Demo代码的最后两部分由实现几何渲染功能的代码和着色器本身构成。渲染几何图形的构成代码在TriangleDemo类中的Render函数中进行。函数中有有一个条件语句,这

12、样可以确保在Direct3D的上下文是有效的。接下来,我们清除渲染目标,并设定输出程序集(input assembler)。而实际上,因为在这个demo之中的三角形是静态的,我们并不一定非要清除渲染目标,这里只是为了规范我们的代码书写,以免养成不良的开发习惯。在输出程序集阶段的设置由我们已经创建的输出结构(input layout)进行绑定,并提供顶点缓存,设置拓扑三角形的列表。下面贴出Render函数的书写思路:代码段七 TriangleDemo类的render函数书写d3dContext_return;clearColor40.5,1.0f/设定背景颜色d3dContext_-ClearR

13、enderTargetView(backBufferTarget_,clearColorunsignedstrideoffsetIASetInputLayout(IASetVertexBuffers(1,vertexBuffer_,stride,IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELISTVSSetShader(solidColorVS_,PSSetShader(solidColorPS_,Draw(3,swapChain_-Present(33. 最后一部分要介绍的代码是着色器。笼统的来说,顶点着色器基于它得到的内容

14、。详细的来说,顶点着色器的作用是将内部得到的顶点位置传递到输出处,之后,我们须处理这些数据,正确绘制出我们的图形。但对于这个非常基础的demo,仅仅进行顶点位置内容的传递就够了。如果没有几何图形着色器绑定到输出程序集之上,顶点着色器的输出的数据就是像素着色器的输入的数据。其中,像素着色器的输出就是写到输出缓存之中的颜色值。当交换链中的Present函数调用的时候,这个缓存就会最终显示给用户。TriangleDemo的顶点着色器和像素着色器的书写方法如下代码段八:代码段八 Triangledemo着色器的实现代码1. float4VS_Main(float4posPOSITIONSV_POSITION7. 9. float4PS_Main(SV_TARGET11.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1