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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言奇偶数交换排序问题

目录 问题描述如下: move函数的具体实现: main函数 运行效果 代码(注意看注释): 问题描述如下: 给定一个整数数组,要求将其中的奇数元素全部移动到前面,偶数元素全…

【深度学习:Foundation Models】基础模型完整指南

【深度学习:Foundation Models】基础模型完整指南 什么是基础模型?基础模型背后的 5 项人工智能原理根据大量数据进行预训练自我监督学习过度拟合微调和快速工程(适应性强)广义的 基础模型的用例基础模型的类型计算机视觉基础模型…

最新版CleanMyMac X4.14.7智能清理mac磁盘垃圾工具

CleanMyMac X是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化Mac系统,…

借助GPT理解 “ Android中 点击弹框外部 取消弹框”

在平常的开发工作中 或 阅读技术博客/书籍 时,难免会遇到我们不懂的知识点,网络上搜索的资料 需要有准确性,系统性,可实操性。 这样的资料查询很费时间且还不一定能找到,但是如果借助训练过的的gpt,就会省下…

[Kubernetes]7. K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群)

上一节讲解了[Kubernetes]6. k8s Pod配置管理ConfigMap & Secret以及传递环境变量的使用,k8s的命名空间以及使用kubens管理命名空间的使用,这里来介绍一下Helm的使用 一.Helm相关介绍 1.介绍 在 kubernetes 系统上部署容器化应用时需要事 先手动编写资源配置清单文件 以…

Prometheus实战篇:Prometheus监控docker

Prometheus实战篇:Prometheus监控docker 准备环境 监控docker 为了能够获取到Docker容器的运行状态,用户可以通过Docker的stats命令获取当前主机上运行容器的统计信息,可以查看容器的CPU利用率,内存使用量,网络IO总量以及磁盘IO总量等信息. docker stats除了使用命令以外,用户…

【占用网络】SurroundOcc:基于环视相机实现3D语义占用预测 ICCV 2023

前言 本文分享“占用网络”方案中,来自ICCV 2023的SurroundOcc,它基于环视相机实现3D语义占用预测。 使用空间交叉注意力将多相机图像信息提升到3D体素特征,即3D体素Query到2D图像中查询融合特征的思想。 然后使用3D卷积逐步对体素特征进行…

如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理

首先,需要用到的这个工具: 百度 密码:qwu2蓝奏云 密码:2r1z 打开工具,切换到“文章工作域”(嗯...默认就是) 找到这个,多内容断行分割 点击打开,出现如下窗口设置 相关的…

Netty-Netty基础应用与了解

前言 Netty 的优势 1、 API 使用简单,开发门槛低; 2、功能强大,预置了多种编解码功能,支持多种主流协议; 3、定制能力强,可以通过 ChannelHandler 对通信框架进行灵活地扩展; 4、性能高…

【教程】通过Excel宏/Pandas两种方法来自动添加渐变数据条

这种数据真的很难看懂: 一般会对其画折线图或者数据条,相比起来就非常直观: 但是每一列都要手动这样设置就非常累了,所以这里就用到了VBA宏(或者Pandas)。 VBA宏方法 从这里进入宏: 随便写一个宏名后点创建&#xff1…

LangChain 69 向量数据库Pinecone入门

LangChain系列文章 LangChain 50 深入理解LangChain 表达式语言十三 自定义pipeline函数 LangChain Expression Language (LCEL)LangChain 51 深入理解LangChain 表达式语言十四 自动修复配置RunnableConfig LangChain Expression Language (LCEL)LangChain 52 深入理解LangCh…

机器视觉在OCR字符检测的应用

在产品质量 检测过程中,对于字符、条码等标识信息的识别、读取、检测是非常重要的一部分,比如在食品饮料包装检测中,生产日期 、保质期 、生产批号 、条码等字符信息是产品管理和追溯必不可缺的,因此利用机器视觉技术进行OCR字符采…

【实用技巧】Windows电脑向iPhone或iPad传输视频方法2:有线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频,以 iPhone 为例,iPad的操作方法类似,本文不作赘述。 二、所需原材料 Windows 电脑(有 USB-A 或 USB-C 接口)(桌面或其它文件夹中…

Web组件的使用

文章目录 1 概述2 加载网页加载在线网页加载本地网页 3 网页缩放文本缩放 4 Web组件事件Web组件处理JS confirm事件 5 Web和JavaScript交互启用JavaScriptWeb组件调用JS方法JS调用Web组件方法 6 处理页面导航7 调试网络应用8 参考链接 1 概述 相信大家都遇到过这样的场景&…

依赖Kafka的Go单元测试例解

Kafka[1]是Apache基金会开源的一个分布式事件流处理平台,是Java阵营(最初为Scala)中的一款杀手级应用,其提供的高可靠性、高吞吐量和低延迟的数据传输能力,让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。 在…

SpringCloud微服务 【实用篇】| RabbitMQ快速入门、SpringAMQP

目录 一:初始RabbitMQ 1. 同步和异步通讯 1.1 同步调用 1.2 异步调用 2. MQ常见框架 二:RabbitMQ快速入门 1. RabbitMQ概述和安装 2. 常见消息队列模型 3. 快速入门案例 三:SpringAMQP 1. Basic Queue 简单队列模型 2. Work Queu…

ORACLE RAC DG文件路径错乱解决办法

最近接手了一个客户的RAC-RAC dg环境的维护,登录上去之后发现dg延迟了8天,由于主库的空间非常紧张,归档日志早就删除了,所以准备使用rman基于scn点的备份恢复的方案恢复dg同步 在备份完成之后,使用新的控制文件进行数据恢复的时候报错datafile 43 not found: 检查了一下发现当…

SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习)

场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 设计模式-单例模式-饿汉式单例模式、懒汉式单例模式、静态内部类在Java中的使用示例: 设计模式-单例模…

Python requirements.txt 详解

文章目录 1 概述1.1 作用1.2 注意 2 操作2.1 生成 requirements.txt2.2 安装 requirements.txt 3 示例3.1 新建 Django 项目3.2 找到 Scripts 目录,执行生成 requirements.txt 命令 1 概述 1.1 作用 作用:记录 当前项目下 所有 依赖包及其版本号&#…

不知道题目是啥

本题是学校的集训里的题,所有不知道题目名字是啥,直接看题目就好 解题思路:因为字符串只含有小写字母,所以可以创建两个数组分别来存s和t的每个字母出现次数,然后遍历数组,如果s字符串中的某个字母比t的小&…