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()两个方法将顶点着色器和像素着色器绑定到管线上
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)