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

目录

第一章:OpenGL works with triangles

第二章: 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的动态类型和通用性有所不同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/297614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开发个小破软件——网址导航,解压就能用

网址导航 网站导航也称链接目录,将网站地址或系统地址分类,以列表、图文等形式呈现,帮助快速找到需要的地址。 应用场景 高效查找:网址导航是很好的入口,通过分类清晰的网站推荐,可以迅速访问网站资源。…

数据的创建、调用、修改、删除存储过程,以及第一类丢失更新(回滚丢失)和 第二类丢失更新(覆盖丢失/两次更新问题)

数据的创建存储过程、调用存储过程、修改存储过程、删除存储过程,以及第一类丢失更新(回滚丢失)和 第二类丢失更新(覆盖丢失/两次更新问题) 文章目录 一、创建存储的语法二、调用存储过程三、修改存储过程四、删除存储…

【python实战】python一行代码,实现文件共享服务器

一行代码实现文件共享 在一个局域网内,需要共享一个文件夹里内容。 我们可以在任意一台有python环境的电脑上,迅速架起一个http协议的服务,然后将文件夹里的文件内容共享出来。是的仅仅需要一行代码 就是这么简单 把电脑的相关项目文件通…

Python中的有序字典是什么

有序字典 一、简介 Python中的字典的特性:无序性。 有序字典和通常字典类似,只是它可以记录元素插入其中的顺序,而一般字典是会以任意的顺序迭代的。 二、普通字典 #! /usr/bin/env python3 # -*- coding:utf-8 -*- d1 {} d1[a] A d1[b…

【Unity】 HTFramework框架(四十七)编辑器日志中使用超链接的技巧

更新日期:2024年1月3日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 日志中使用超链接超链接-网络地址超链接-本地地址超链接-项目资源文件超链接-脚本对象 日志中使用超链接 在编辑器控制台Console中的日志是支持富文本的&…

使用Spring Cache优化数据库访问

使用Spring Cache优化数据库访问 在这篇博客中,我们将学习如何使用Spring Cache来优化数据库访问,提高系统性能。我们将创建一个简单的图书管理应用作为示例,并演示如何通过缓存减少对数据库的频繁查询。 1. 项目结构 首先,我们…

web自动化(6)——项目配置和Grid分布式

1. 框架的可配置性 项目之间的区别: 兼容性:有些项目只兼容chrome,有些只兼容Firefox等元素定位特点:有些项目闪现快,有的项目很慢有些项目集成Jenkins,不需要用python生成allure报告 如果想要我们的框架…

cesium键盘控制模型

效果: 由于对添加模型和更新位置api进行二次了封装,下面提供思路 1.添加模型 const person reactive({modelTimer: null,position: {lon: 104.07274,lat: 30.57899,alt: 1200,heading: 0,pitch: 0,roll: 0,}, }); window.swpcesium.addEntity.addMo…

主流大语言模型从预训练到微调的技术原理

引言 本文设计的内容主要包含以下几个方面: 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节:tokenizer、位置编码、Layer Normalization、激活函数等。大语言模型的分布式训练技术:数据并行、张量模型并行、流水线并行、3D 并行、零冗余优…

【教学类-43-16】 20240106 推算5-9宫格数独可能出现的不重复题量(N宫格数独模板数量的推算)

作品展示: 通过对各种已有结果的人工推算,目前得到两个结论 一、阶乘基本样式的数量【【123】【321】【231】【132】【312】【312】】6组 结论:阶乘等于出现的基本样式数量 以下N*N格会出现的最大排序数量(比如包含333222111这种…

玩转爱斯维尔 LaTeX 模板:定制技巧一网打尽!

简介 关于 LaTeX 小编写过一些推文: 适合撰写课程论文的 LaTeX 模板; LaTeX 常用数学符号汇总; 免费升级 overleaf 高级账户!; 如何下载使用期刊的 LaTeX 模板 本文基于常用的 Elsevier 期刊模板,小编分享个人常用的使用技巧&#xff0…

nvidia-smi 完整查看显卡型号

当我们在使用nvidia-smi查看显卡的型号的时候,会发现出现如下问题: 可以看到我们此时无法看到显卡的准确型号,只能看到NVIDIA GeForce ... 解决方法:使用如下命令即可完整显示显卡型号 nvidia-smi -L 如下所示:

APP自动化测试工具:八款推荐解析

如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。 uiautomator2 github地址:github.com/openatx/uia… UiAutomator 是 Google 提供的用来做安卓自动…

C语言中灵活多变的动态内存,malloc函数 free函数 calloc函数 realloc函数

文章目录 🚀前言🚀管理动态内存的函数✈️malloc函数✈️free函数✈️calloc函数✈️realloc函数 🚀在使用动态内存函数时的常见错误✈️对NULL指针的解引用✈️ 对动态开辟空间的越界访问✈️对非动态开辟内存使用free释放✈️使用free释放一…

新手养布偶猫如何选择猫主食冻干?K9、sc、希喂三个品牌推荐!

布偶猫是食肉动物,但由于肠胃脆弱敏感,所以在饮食上需要特别关注哦!为了给它们最好的呵护,现在有了主食冻干这种优质猫主食!它不仅符合猫咪的天然饮食习惯,还用了新鲜生肉做原料呢!营养满分不说…

我的隐私计算学习——联邦学习(2)

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具,经由自己阅读后整理而成 (三)联邦学习的算子 ------------------------ 算子是什么?--------------------------- ​ 从广义上讲,对任何函数进行某一项操作都可…

设计模式学习2

代理模式:Proxy 动机 “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方案。在面向对象系统中,直接食用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常见手段。 2.伪代码: class ISubject{ pu…

SPI知识大全

目录 SPI介绍SPI分为硬件SPI与软件SPISPI工作模式和时序图硬件SPI编写软件SPI编写拓展: SPI介绍 SPI(Serial Peripheral Interface)是一种常用的通信接口,用于在两个设备之间进行数据传输。它通常用于板级通信,具有高…

SolidUI Gitee GVP

感谢Gitee,我是一个典型“吃软不吃硬”的人。奖励可以促使我进步,而批评往往不会得到我的重视。 我对开源有自己独特的视角,我只参与那些在我看来高于自身认知水平的项目。 这么多年来,我就像走台阶一样,一步一步参与…

Redis——centos7环境安装Redis6.2.14版本,make命令编译时报错:jemalloc/jemalloc.h:没有那个文件或目录

一、报错原因 在redis-6.2.14文件夹下有一个README.md文件,有如下一段话: 在构建 Redis 时,通过设置 MALLOC 环境变量来选择非默认的内存分配器。Redis 默认编译并链接到 libc malloc,但在 Linux 系统上,jemalloc 是…