当前位置:网站首页>「游戏引擎 浅入浅出」4. 着色器
「游戏引擎 浅入浅出」4. 着色器
2022-07-26 04:34:00 【_Captain】
4. 着色器
「游戏引擎 浅入浅出」是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book
着色器就是Shader,Shader就是一段GPU程序源码。
我们大学就学过的C语言是CPU程序源码,Shader和C 语言有很多相似之处,也要写代码、编译、链接。
通过下面的表格来做对照。
| C语言 | Shader | |
| 目标硬件 | CPU | GPU |
| 编译流程 | 创建项目 | 创建GPU程序 |
| 创建多个代码文件 | 创建Shader对象(顶点Shader和片段Shader) | |
| 编写多个代码 | 上传Shader源码到Shader对象 | |
| 编译代码 | 编译Shader | |
| 添加到链接列表 | 添加到链接列表 | |
| 链接 | 链接 |
是不是很相似呢!
渲染一个图像,其实就是在GPU上执行了Shader代码,然后将顶点坐标、颜色数据作为输入,经由Shader进行处理,然后输出像素数据到屏幕上。
和C语言不一样的是,C语言只需要一个main.c 文件就可以编译成功。
但是Shader是配套出现的, Vertex Shader(顶点着色器)、Fragment Shader(片段着色器),两者缺一不可。
| C语言 | Shader | |
| 目标硬件 | CPU | GPU |
| 代码文件列表 | main.c | main.vs(Vertex Shader) |
| ... | main.fs(Fragment Shader) |
着色器的种类
Vertex Shader(顶点着色器)、Fragment Shader(片段着色器/像素着色器) 我们听到最多的就是这两个。
Geometry Shader、Computer Shader看过但是实际项目中没用过。
Tessellation Control Shader 、Tessellation Evaluation Shader这两个就几乎没有听过。
这是由工作内容决定的,大家都是从事手机游戏开发。
目前市面上的手机,很大一部分仍然是OpenGL ES3.0的版本或更低。
Computer Shader在OpenGL ES 3.1版本才开始支持。
Geometry Shader在OpenGL ES 3.2版本才开始支持。
更多资料参考OpenGL官网:
https://www.khronos.org/opengl/wiki/Category:Shaders
本书也仅介绍Vertex Shader(顶点着色器)、Fragment Shader(片段着色器)。
在 3.绘制简单图形 这一章的配套项目里,ShaderSource.h 里面就存放着Vertex Shader 和 Fragment Shader 的源码。
如下图:

观察这段代码,又发现和C语言的相同之处 – 入口都是 main 函数。
| C语言 | Shader | |
| 目标硬件 | CPU | GPU |
| 入口 | void main() | void main() |
当前小节对Shader有了一个大概的映像即可,后续章节再详细介绍。
边栏推荐
猜你喜欢
![[C language foundation] 13 preprocessor](/img/4c/ab25d88e9a0cf29bde6e33a2b14225.jpg)
[C language foundation] 13 preprocessor

Credit card fraud detection based on machine learning

Support proxy direct connection to Oracle database, jumpserver fortress v2.24.0 release
![[300 + selected interview questions from big companies continued to share] big data operation and maintenance sharp knife interview question column (VIII)](/img/a0/b2b0f5fb63301f5b7dd14302aa39e2.png)
[300 + selected interview questions from big companies continued to share] big data operation and maintenance sharp knife interview question column (VIII)

2、 Internationally renowned project HelloWorld

UE4 controls the rotation of objects by pressing keys

Unable to find sygwin.s file during vscode debugging

嵌入式实操----基于RT1170 FreeRTOS实现CPU使用率统计(二十四)

Calculate the curvature of discrete points (matlab)

Scroll view pull-down refresh and pull-up load (bottom)
随机推荐
软考回顾及计划
Wu Enda's machine learning after class exercises - linear regression
Steam science education endows classroom teaching with creativity
11、 Exception handler
mongoDB为什么快
Face database collection summary
UE4 keyboard control switch light
这种是我的vs没连上数据库吗
数组排序3
egg-ts-sequelize-CLI
Offline installation of idea plug-in (continuous update)
力扣每日一题-第42天-661. 图片平滑器
九、文件上传和下载
5、 Domain objects share data
数据仓库
再获认可 | 赛宁网安连续上榜《CCSIP 2022中国网络安全产业全景图》
UE4 switching of control rights of multiple roles
Acwing brush questions
Graph translation model
What are the consequences and problems of computer system restoration