DirectX11:着色器

一.简介

在DirectX 11 SDK中,支持三种基础着色器:顶点着色器(Vertex Shader) 像素着色器(Pixel Shader / Fragment Shader) 几何着色器(Geometry Shader)

 

顶点着色器通过顶点作为输入数据,只要将每个顶点缓存传入GPU就会执行

像素着色器使用一个像素作为输入数据

几何着色器使用基元(Primitive,点/线/面)作为输入

在Direct3D 11中,GPU必须包含一个正确的顶点和像素着色器,而几何着色器是可选的

 

二.顶点着色器

顶点着色器类似C语言的一个函数,通过顶点作为参数输入这个函数,并且返回编程后的顶点信息.

当程序通过顶点着色器传入顶点缓冲数据时,GPU就会迭代顶点缓冲数据,并为每个顶点执行一次着色器函数

顶点着色器最主要是用于坐标变换

1
2
3
4
flaot4 VS(float4 Pos : POSITION) : SV_POSITION
{
     return Pos;      
}

 

三.像素着色器

一个三角形,包含了三个顶点,把三个顶点连载一起称为光栅化

像素着色器通过输入的像素颜色值,通过GPU计算颜色并返回渲染管线

1
2
3
4
float4 PS(float4 Pos : SV_POSITION) : SV_Target
{
  return float4(1.0f, 1.0f, 0.0f, 1.0f);
}

 

 

四.几何着色器

 

 

五.编译着色器

着色器编写的代码(HLSL)保存在一个文本文件中,可以通过Direct3D 11中的D3DX11CompileFronFile()进行编译

1
2
3
4
5
6
7
// Create the vertex shader
if(FAILED(D3DX11CompileFromFile("Tutorial03.fx", NULL, NULL, "VS", "vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pVSBlob, &pErrorBlob, NULL)))
    return FALSE;
 
// Create the pixel shader
if(FAILED(D3DX11CompileFromFile("Tutorial03.fx", NULL, NULL, "PS", "vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pVSBlob, &pErrorBlob, NULL)))
    return FALSE;

 

 

六.绑定着色器

通过VSSetShader()和PSSetShader()两个方法将顶点着色器和像素着色器绑定到管线上

 

posted @   言午丶  阅读(768)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示