- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
D3D8顶点着色指南译.docx
D3D8 顶点着色指南 译:zh1110
Note: This tutorial was written by Roberto in Italian first, he then translated it into English for DirectX4VB.com and I (Jack Hoxley) cleaned up a few translation errors. I’ve left the text as close to the original as possible. For any support requests/problems I suggest you email Roberto or visit his website - Rnacch@tin.it and http://utenti.lycos.it/robertozero/main.htm
? 顶点着色是现代渲染的重要技术之一。在DirectX8中Microsoft公司引入了一些新的特性来帮助程序员。顶点着色是用汇编语言写的,插入到着色器流水线来修改顶点特性,一般的DX过程不受其影响。下面的图表显示在Direct3D 管道线内处理顶点及象素着色的过程:
顶点渲染让渲染方式改变成为可能,其中最出名的是卡通渲染(在XBOX游戏中也使用它)。它跟VB的速度没有关系,因为它是汇编写的。
这是3D,但通过顶点渲染。
这也是3D!
使用顶点着色不仅要知道如何加载顶点着色文件我们还要学习如何编写其过程本身的汇编代码。幸运的是它比通常的X86汇编简单的多。
这个指南分为三部分:
I)? 加载顶点渲染文件
II) 创建顶点渲染代码
III) 顶点渲染示例
第一部分: 加载顶点着色文件
首先我们学习加载顶点着色文件。拷贝下面代码到一文本文件中(*.txt)
vs.1.0?
dp4 r0.x, v0, c0?
dp4 r0.y, v0, c1?
dp4 r0.z, v0, c2?
dp4 r0.w, v0, c3?
mov oPos, r0 ;?
mov oD0, c4
在VB中是用一长串数据来代表顶点类型,它也将在汇编代码中使用。创建这一长串的常数可以放在一个*.bas模块中,microsoft SDK中就可以找到下面代码。
Function creaVShader(filesrc As String) As Long
Dim shaderArray() As Long
Dim shader As Long?
Dim decl(4) As Long?
Dim shaderCode As D3DXBuffer
decl(0) = D3DVSD_STREAM(0)?
decl(1) = D3DVSD_REG(D3DVSDE_POSITION, D3DVSDT_FLOAT3)
decl(2) = D3DVSD_REG(D3DVSDE_NORMAL, D3DVSDT_FLOAT3)?
decl(3) = D3DVSD_REG(D3DVSDE_TEXCOORD0, D3DVSDT_FLOAT2)?
decl(4) = D3DVSD_END()
Set shaderCode = D3DX.AssembleShaderFromFile(filesrc, 0, , Nothing)?
ReDim shaderArray(shaderCode.GetBufferSize() / 4)?
D3DX.BufferGetData shaderCode, 0, 1, shaderCode.GetBufferSize(), shaderArray(0)?
Set shaderCode = Nothing?
device.CreateVertexShaderdecl(0), shaderArray(0),shader, D3DUSAGE_SOFTWAREPROCESSING
?creaVShader = shader?
End Function
decl数组中放入的数值用于保存标准的顶点信息,包含位置,法向,贴图(我们也可以创建两个位置坐标来实现弯曲)。数据在这个模块中创建,但我们只须记者一个。相似的数组也象这样
decl(0) = 536870912?
decl(1) = 1073872896?
decl(2) = 1073872899?
decl(3) = 1073807367?
decl(4) = -1
在声明文件路径后,把它放入另一个数组。最后通过它产生我们的渲染。这个过程产生一系列渲染,在每一我们需要的时刻,只要加载文件
ShaderL = creaVShader (“shader path”)
我们现在要连接汇编代码,我们通过渲染矩阵或四个数组。通过数组我们
文档评论(0)