GLSL着色器入门(持续更新中...)

目录

[第一章:OpenGL works with triangles](#第一章:OpenGL works with triangles)

[第二章: Parallel Processing](#第二章: Parallel Processing)

第章


推荐来自b站的课程004 GLSL is not Javascript_哔哩哔哩_bilibili

第一章:OpenGL works with triangles

当我们谈论GLSL着色器时,其实就是在说怎么在屏幕上绘制出漂亮的图形。

首先,我们有一个三角形,它有三个顶点,每个顶点在三个坐标轴上都有一个位置,就像我们在地图上找位置一样。通过定义这些顶点的位置,我们可以把三角形投影到屏幕上。

现在我们要想给这个三角形上色,就像给一张涂色图上色一样。我们使用GLSL着色器来实现这个过程。 顶点着色器就像是一个导航小助手,它帮助我们确定每个顶点在屏幕上的具体位置。它接收三角形的顶点位置作为输入,然后计算出这些顶点在屏幕上的坐标。

然后,轮到片段着色器出场了。片段着色器就像是一个涂色大师,它负责给三角形内的每个像素上色。它决定了每个像素显示的颜色,就像在一张涂色图上填充颜色。 通过设置像素的颜色值,我们可以制作出各种有趣的效果。

例如,把红色通道的值设为255,绿色和蓝色通道的值设为0,就可以得到红色。

此外,我们还需要考虑到图形的遮挡关系。Z缓冲是一个记录每个像素与相机之间距离的技术,可以确保前面的图形覆盖后面的图形。

总而言之,GLSL着色器可以帮助我们在屏幕上绘制漂亮的图形。顶点着色器帮助我们确定顶点在屏幕上的位置,片段着色器则负责给像素上色。而Z缓冲则处理图形的遮挡关系。通过使用这些技术,我们可以制作出炫酷的图像效果。

第二章: Parallel Processing

并行处理指的是同时执行多个任务或操作。CPU和GPU在并行处理方面有所不同。

CPU是计算机的大脑,它擅长处理复杂的任务和大程序,而且具有较大的内存容量。它适用于处理需要高度逻辑和顺序处理的任务,例如操作系统、数据分析等。

GPU是图形处理器,主要用于图形渲染和处理。GPU比CPU拥有更多的处理单元(即核心),并且每个核心可以同时处理多个任务。虽然GPU的内存容量较小,但它非常适合进行并行计算,尤其是在处理图形和图像方面。

当我们使用GLSL着色器时,我们利用了GPU的并行处理能力。每个像素和顶点都是独立处理的,这意味着它们可以同时进行计算。这种并行处理方式使得在绘制复杂图形时速度快了50到100倍。

使用并行处理的好处是在绘图和渲染方面更高效。它特别适用于图形设计和游戏开发,因为这些领域需要大量的计算和绘制操作。

总之,并行处理是指同时执行多个任务或操作。CPU和GPU在并行处理方面的能力略有不同,但都可以用于加速计算和图形处理。

第三章 GLSL不是JavaScript

首先,让我们来谈谈GLSL语言的背景。GLSL是一种用于编写着色器的语言,它最早由丹尼斯·里奇在1970年代创造。它主要用于在计算机图形学中进行图形处理和渲染。如果您熟悉JavaScript,那么使用GLSL可能会比较容易。但是,GLSL与JavaScript相比具有一些重要的区别。

1. 强类型语言:

GLSL要求在定义变量和函数时明确指定类型,如整数类型变量`int`或浮点数类型变量`float`。这使得GLSL能够更好地进行计算优化,并在编写着色器代码时更加严格。

2. 向量类:

GLSL引入了向量(`vec`)类,用于处理多个值。这些向量可以具有不同的维度,如2D、3D或4D。借助这些向量,可以表示位置、颜色等,并进行各种数学运算。

3.函数的使用:

GLSL支持函数的重载,允许创建具有相同名称但不同参数和返回类型的函数。这在组织代码和增加灵活性方面非常有用。在GLSL中,我们可以使用`bool`作为返回类型,同时存在`float x`和`float y`作为参数。在调用函数时,代码将使用与函数调用匹配的参数。这种特性被称为函数重载,是GLSL中非常有用的功能。

4.条件语句:

GLSL中使用关键字`if`进行条件判断,并允许嵌套多个条件语句,与JavaScript中的条件语句相似。然而,在GLSL中,我们还需要注意使用分号以及使用`const`限定符声明常量。

在GLSL中,函数需要指定返回类型,并且如果没有返回任何内容,必须为每个参数提供类型。与JavaScript中的函数不同,GLSL对函数定义有更严格的要求。

例如,我们可以创建一个名为`pointInRect`的函数,用于判断给定点是否在矩形内部。这个函数使用`bool`关键字作为返回类型,并以`vec2`类型的参数表示具有两个浮点数值的向量。

5.函数的重载:

如果我们想在已经在GLSL中定义的`pointInRect`函数之上创建一个新的函数,该函数从矩形的左上角和右下角点中获取值,并计算其高度,那么这将覆盖先前的定义。这意味着即使两个函数具有相同的名称,如果它们具有不同的返回类型或参数,它们实际上是不同的函数。

6.小结

GLSL是一种强类型语言,用于编写着色器,主要用于图形处理和渲染。相比之下,GLSL要求明确指定类型,并使用严格的语法,以优化计算。这与JavaScript的动态类型和通用性有所不同。

相关推荐
码农飞哥22 分钟前
WorkBuddy 两个月没动,今晚测试红了 2 条
人工智能·效率·ai工具·workbuddy
硅谷秋水40 分钟前
面向科学的科学AI智能体:任务、架构、评估与挑战综述
人工智能·科技·语言模型
叼烟扛炮41 分钟前
[LangChain] 学习笔记(04):手搓 ChatGPT 打字机——流式输出(SSE)与模型初始化选型
人工智能·笔记·chatgpt·langchain
奶油话梅糖1 小时前
2,615 个知识点、3,003 条先修边:6,800 Star 的开源知识图谱,能顺着错题从高中回溯到小学
人工智能·知识图谱
seacracker1 小时前
不重造 S3 轮子:PowerFS 如何把 RustFS 变成自己的 S3 服务面
人工智能·kv存储·rustfs·powerfs·s3对象存储
IT_陈寒1 小时前
SpringBoot实战技巧总结
前端·人工智能·后端
lucas_AI2 小时前
Agent 基准也会烂:Terminal-Bench 三成任务有缺陷,修复后分数集体上涨 10 个点
人工智能·agent
AI源码2 小时前
基于深度学习的日常服饰分类与推荐系统设计
人工智能·深度学习·分类
johnsong10 小时前
AI前沿日报 · 2026-10-31 | 安全失守——当AI工具被下毒、当云端门户洞开
人工智能·安全
得帆低代码PaaS11 小时前
企业级 Agent 架构:MCP、Integration、数据与治理能力
大数据·人工智能·架构·ai agent·企业数字化·mcp