着色器和效果——2.3 使用顶点着色器的步骤

原创 2004年05月12日 17:05:00

2.3 使用顶点着色器的步骤

阅读此文表明您已同意文末的声明<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

下面的列表概括了创建和使用顶点着色器的必须步骤。

1.        编写并编译顶点着色器

2.        创建一个IDirect3DVertexShader9接口以代表基于已编译着色器代码上的顶点着色器。

3.        IDirect3DDevice9:: SetVertexShader方法允许这个顶点着色器。

当然,在我们做完这些之后,我们还得销毁这个顶点着色器。下面的各小节将更详细的迈入这些步骤。

2.3.1 编写并编译顶点着色器

首先,我们必须编写一个顶点着色器程序。在本书中的HLSL一章中,我们已经编写了我们的着色器(译者注:参见我翻译的译文第一章中各节)。一旦着色器代码写好之后,我们就使用D3DXCompileShaderFromFile函数编译这个着色器,如1.2.2所述。回忆一下,这个函数返回一个ID3DXBuffer指针,它包含了已编译的着色器代码。

2.3.2 创建顶点着色器

一旦我们拥有了编译好的着色器代码,我们就能够获得一个IDirect3DVertexShader9接口的指针,它代表一个顶点着色器——通过使用下面的方法:

HRESULT IDirect3DDevice9::CreateVertexShader(

     const DWORD *pFunction,

     IDirect3DVertexShader9** ppShader

);

pFunction——已编译着色器代码的指针

ppShader——返回一个IDirect3DVertexShader9接口的指针

例如,假设变量shader是一个包含已编译着色器代码的ID3DXBuffer(的接口指针)。然后要获得一个IDirect3DVertexShader9接口,我们可以写:

IDirect3DVertexShader9* ToonShader = 0;

hr = Device->CreateVertexShader(

           (DWORD*)shader->GetBufferPointer(),

           &ToonShader);

注意:重申一遍,D3DXCompileShaderFromFile是一个返回已编译着色器代码(shader)的函数。

2.3.3 建立顶点着色器

在我们获得了一个代表我们的顶点着色器的IDirect3DVertexShader9接口的指针之后,我们就能够使用下面的方法允许(enable)它:

HRESULT IDirect3DDevice9::SetVertexShader(

     IDirect3DVertexShader9* pShader

);

这个方法仅接受一个参数,我们在其中传递一个想要允许的顶点着色器的指针。要允许这个我们在2.3.2创建的着色器,我们可以写:

Device->SetVertexShader(ToonShader);

2.3.4 销毁顶点着色器

和所有的Direc3D接口一样,要清除他们,我们就必须在用完它们之后调用其的Release方法。仍然以我们在2.3.2创建的顶点着色器为例,我们写:

d3d::Release<IDirect3DVertexShader9*>(ToonShader);

 

 

[声明]:本文译自Frank Luna的《Introduction to 3D Game Programming with DirectX 9.0》,限于译者水平,文中难免错漏之处,欢迎各位网友批评指正;本文仅用于学习交流与参考用途,不得用于任何形式的商业用途;如需转载需事先征得作者本人和译者的同意,保持文章的完整性,并注明作者、译者和出处,作者保留对译文的所有权利。对于违反以上条款造成的后果,译者对此不负任何责任。我的MSNRaymond_King123@hotmail.com,欢迎热爱3D图形和游戏,并有一定图形编程经验的朋友与我进行交流。

 

 

介绍顶点着色器和像素着色器

目录:第一部分 顶点着色器第二部分 像素着色器第三部分 寄存器第四部分 教程(分别使用了D3D和OpenGL)第五部分 结论文档内容:第一部分 顶点着色器什么是顶点着色器?1 顶点着色器是一组指令代码...
  • leeeyupeng
  • leeeyupeng
  • 2010年12月29日 21:02
  • 1070

顶点着色器和像素着色器的数据处理流程

顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中...
  • mansir123
  • mansir123
  • 2016年11月29日 17:05
  • 267

UnityShader初级篇——最简单的顶点/片元着色器

1.最初的顶点/片元着色器 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' //...
  • weixin_37994402
  • weixin_37994402
  • 2017年10月12日 17:38
  • 241

扭曲效果顶点着色器的实现(Shader特效5)

扭曲效果的实现 说在开始: 最近使用顶点着色器开发了一个扭曲的例子,在这里进行总结一些算法和开发过程。我都将我的代码放到了我的github上https://github.com/ModestB...
  • ModestBean
  • ModestBean
  • 2018年01月26日 13:30
  • 55

顶点着色器和片元着色器通信

Shader "Custom/testShader" {  properties{   _Color ("my color", Color) = (1.0, 1.0, 0, 1.0)  }  subs...
  • u014800094
  • u014800094
  • 2016年11月09日 14:14
  • 337

GPUImage 顶点着色器和片元着色器 详解

//顶点着色器 //v.shader //顶点着色器是一个可编程的处理单元,执行顶点变换、纹理坐标变换、光照、材质等顶点的相关操作,每顶点执行一次。替代了传统渲染管线中顶点变换、光照以及纹理坐标的处...
  • jeffasd
  • jeffasd
  • 2016年08月31日 14:37
  • 2697

UnityShader从入门到放弃(二)表面着色器和顶点、片元着色器

1.表面着色器:表面着色器是Unity特有的一种着色器代码类型,表面着色器定义在SubShader中。表面着色器需要编写的代码量很少,Unity会自动处理一些细节。但是表面着色器的本质和顶点、片元着色...
  • IT_break
  • IT_break
  • 2017年09月06日 22:33
  • 411

第三章节:在着色器中调试(关于顶点输入参数)

顶点数据从哪里获得 在《RGB 立方体》章节中,你已经知道片段着色器如何从顶点着色器的顶点输出参数结构体中获得数据,但这儿有个问题就是我们应该从哪儿获得顶点着色器的数据?答案是在 Unity 中, ...
  • u013354943
  • u013354943
  • 2016年08月18日 15:51
  • 960

Unity3D 编写顶点和片元着色器( ShaderLab )

ShaderLab 着色器不仅仅包括“硬件着色器”。这些着色器做很多事情。它们描述在材质检视器 (Material Inspector) 中显示的属性,容纳用于不同图形硬件的多种着色器实现,配置固定函...
  • andyhebear
  • andyhebear
  • 2015年07月30日 15:03
  • 1848

DirectX11 编译着色器、创建顶点着色器、创建像素着色器

编译着色器1. 如何让GPU执行着色器代码? 你能够选择已经编译好的字节码,或者像我们直接由Direct3D来编译它,它可被本书后面的Demo所接受。编译一个着色器只需调用D3DX11Compil...
  • sinat_24229853
  • sinat_24229853
  • 2015年07月18日 21:16
  • 1721
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:着色器和效果——2.3 使用顶点着色器的步骤
举报原因:
原因补充:

(最多只允许输入30个字)