着色器(Shader)之顶点着色器

本文介绍了顶点着色器的概念,它是GPU中运行的程序,提供顶点操作的灵活性。文章详细讲解了顶点声明的创建、启用,以及顶点数据的使用,强调了HLSL语言在编写顶点着色器中的应用,并提供了使用顶点着色器的步骤和代码示例。
摘要由CSDN通过智能技术生成

顶点着色器其实就是我们自己编写的一段在GPU中运行的程序,有了顶点着色器,我们就可以从固定的功能流水线中代替一些模块,

从而获得更多的顶点操作的灵活性。

对于顶点位置进行操作的的能力具有广泛的应该场合:织物模拟、粒子系统的点尺寸处理等。

可编程流水线中的顶点结构比固定的流水线具有更加丰富的数据。

首先我们应该检测一下,硬件是否支持顶点着色器:

//如果设备支持的版本低于2.0版
if(caps. VertexshaderVersion <D3DVS_VERSION(2,0))
//然后此设备不支持顶点着色器版本2.0

顶点声明(比灵活顶点格式更牛逼的一种格式)

之前使用的都是灵活顶点格式来表示顶点,在可编程的流水线中,我们使用比灵活顶点格式表示的内容更丰富,功能更强大的顶点声明


顶点声明的描述

我们将顶点声明描述为一个D3DVERTEXELEMENT9类型的一个数组,该数组中的没有一个元素都描述了一个顶点结构的分量

所以如果你的顶点结构具有3个分量(位置,颜色,法线),则相对应的顶点声明就可以用一个维数为3的D3DVERTEXELEMENT9类型数组来描述

D3DVERTEXELEMENT9结构定义:

typedef struct D3DVERTEXELEMENT9{
    WORD Stream;
    WORD Offset; 
    BYTE Type; 
    BYTE Method; 
    BYTE Usage; 
    BYTE UsageIndex;
)D3DVERTEXELEMENT9,*LPD3DVERTEXELEMENT9;

Stream:指定与顶点分量相关的数据流
Offset:自地顶点数据起始点到特定数据类型的偏移量
比如:
顶点结构:

struct Vretex{
    D3DVECTOR3 pos;
    D3DVECTOR3 normal;
}


当前位置存放到的是法线normal,由于sizeof(pos) = 12,所以normal相对于顶点结构起始点偏移量就是12,该参数的值就是12

Type 指定数据类型。该参数可取枚举类型D3DDECLTYPE的任何一个成员,一些常用的类型如下:
D3DDECLTYPE_FLOATI浮点类型的标量。
D3DDECLTYPE_FLOAT2浮点类型的2D向量。
D3DDECLTYPE_FLOAT3浮点类型的3D向量。
D3DDECLTYPE_FLOAT4浮点类型的4D向量。
D3DDECLTYPE_D3DCOLOR 一个被扩展为RGBA浮点类型颜色向量(r,g,b,a)的D3DCOLOR类型,
其中颜色向量的每个分量都被规范化至区间[0,]内。

Method 指定了顶点分量的用途,比如:某一分量是作为位置向量,法向量还是纹理向量
主要取自下面的枚举类型:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值