DirectX9:高级着色语言(HLSL)语法

一.简介

高级着色语言(High)可以编写顶点着色器和像素着色器,取代固定功能流水线中的部分功能,在图形卡的GPU(Graphics Processing Unit,图形处理单元)中执行

注意:如果图形卡不支持顶点着色器和像素着色器,可以切换为REF设备,但是这个设备会运行很慢

Shader language目前有3种主流语言:基于OpenGL的GLSL(OpenGL Shading Language)

                                                           基于Direct3D的HLSL(High Level Shading Language)

                                                            NVIDIA公司的Cg(C for Graphic)语言

二.D3DXCompileShaderFromFile()

可以用.txt文本文件来存储着色器代码,再用D3DXCompileShaderFromFile()来加载

1.顶点着色器

顶点着色器定义了着色器输入和输出的顶点数据

像素着色器定义了着色器输入和输出的像素数据

// 该顶点着色器对顶点实施了取景变换(view transformation)和投影变换(projection transform),并将顶点的漫反射颜色分量设为蓝色

// 一个HLSL内置的4*4矩阵类型,存储的是一个视图矩阵和投影矩阵的乘积 matrix ViewProjMatrix;
// 一个HLSL内置的4D向量类型,初始化为RGBA颜色的蓝色向量 vector Blue = {0.0f, 0.0f, 1.0f, 1.0f}; // 着色器输入结构的顶点数据 struct VS_INPUT {
// 位置分量 vector position : POSITION; };
// 着色器输出结构的顶点数据 struct VS_OUTPUT {
 // 位置分量 颜色分量 vector position : POSITION; vector diffuse : COLOR; };
// 主入口函数,输入顶点数据,返回输出顶点数据 VS_OUTPUT Main(VS_INPUT input) {
// 所有成员的值设为0 VS_OUTPUT output = (VS_OUTPUT)0;

// 矩阵相乘 output.position = mul(input.position, ViewProjMatrix);

 // 漫反射分量 output.diffuse = Blue; return output; }
// 另一种入口 函数的表示方法

struct INPUT
{
  float2 base : TEXCOORD0;
  float2 spot : TEXCOORD1;
  float2 text : TEXCOORD2;
};

struct OUTPUT
{
  float4 c : COLOR;
};


float4 Main(int float2 base : TEXCOORD0,
                 int float2 spot : TEXCOORD1,
                 int float2 text : TEXCOORD2) : COLOR
{
  ..
}

猜你喜欢

转载自www.cnblogs.com/k5bg/p/11075927.html