计算机图形学入门11:图形管线与着色器
1.什么是图形管线
把场景中的物体经过一系列的处理,最后一张图像的形式在屏幕上显示出来,这一系列过程就是图形管线(Graphics Pipeline),也叫实时渲染管线(Real-time Rendering Pipeline)。如下图所示,为整个渲染管线的过程。

渲染管线从上到下依次完成以下步骤:
1.获取到场景中三维空间中的一些顶点。
2.经过投影变换,将这些点转换到屏幕坐标系下。
3.将这些点拼装成不同的三角形。
4.通过光栅化,将三角形离散成不同的着色点,也就是片元(Fragment)。
5.着色计算,给不同片元进行光照计算等处理。
6.输出到屏幕上。
这些步骤都是在硬件GPU上写好的。
着色(Shading)会同时发生在顶点处理阶段(Vertex Processing)和片元处理阶段(Fragment Processing),这个是因为考虑不同的着色频率。如果使用的是顶点着色(Gouraud Shading),对每个顶点进行着色处理那就发生在顶点处理阶段,如果使用的片元着色(Phong Shading),对每个片元(像素)进行着色,那么就发生在片元处理阶段。在现代的GPU里,这套渲染管线允许有一部分是可编程的,这部分就叫做着色器(Shader),用来控制顶点和像素是如何进行着色的。

2.着色器
在上述已经说明了,在现代的GPU里,渲染管线允许有一部分是可编程的,在顶点和片元处理阶段,对顶点和片元(像素)是进行如何着色,这就是着色器(Shader)。
Shader本质上是能够在硬件上执行的语言,举一个OpenGL上GLSL语言的例子,如下图所示,OpenGL是图形学中的一个API,可以写Shader。

Shader中每一个顶点或像素执行一次,写一个函数都是通用的,每一个像素都会执行,只需要操作一个顶点或像素。GPU都是并行计算的,运输性能远超CPU。
对顶点进行着色的叫做顶点着色器(Vertex Shader),对片元(像素)进行着色的叫做片元着色器(Fragment Shader)。随着现代GPU的发展,出现了几何着色器(Geometry Shader),可以动态产生更多的三角形,对几何的操作。还出现了Compute Shader,它不仅仅是图形学内部的计算,还可以做各式各样通用的GPU计算。
练习Shader可以去Shadertoy BETA网站。以下图片是使用Shader实现的一个例子。

相关文章:
计算机图形学入门11:图形管线与着色器
1.什么是图形管线 把场景中的物体经过一系列的处理,最后一张图像的形式在屏幕上显示出来,这一系列过程就是图形管线(Graphics Pipeline),也叫实时渲染管线(Real-time Rendering Pipeline)。如下图所示,为整个渲染管线的过程。 渲染…...
正解 x86 Linux 内存管理
1,机器解析的思路 发现网络上大量的教程,多是以讹传讹地讲解 Linux 内存管理; 都是在讲: 逻辑地址 -> 线性地址 -> 物理地址 这个转换关系是怎么发生的。 上面这个过程确实是程序运行时地址的翻译顺序; …...
springboot读取配置时,读取到了系统环境变量
在Spring Boot应用中,读取配置通常通过application.properties或application.yml文件进行。不过,Spring Boot也支持从系统环境变量读取配置,这使得应用可以在不同的环境中灵活配置。下面详细介绍如何在Spring Boot中读取系统环境变量。 1. 配…...
平均召回(Average Recall,AR)概述
平均召回(Average Recall,AR)概述 在深度学习中,平均召回(Average Recall, AR)是一个衡量模型在不同阈值下的召回率的综合指标,特别常用于目标检测任务。召回率(Recall)…...
WWDC 2024 回顾:Apple Intelligence 的发布与解析
一年一度的苹果全球开发者大会(WWDC)如期而至,2024 年的 WWDC 再次成为科技界的焦点。本次发布会中,苹果正式推出了他们在 AI 领域的全新战略——Apple Intelligence。这一全新概念旨在为用户打造“强大、易用、全面、个性化、注重…...
[Cloud Networking] SPDY 协议
文章目录 1. 背景2. SPDY 之前3. SPDY 项目目标4. SPDY 功能特点4.1 SPDY基本功能4.2 SPDY高级功能 1. 背景 TCP是通用的、可靠的传输协议,提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。 HTTP是提供基本请求/响应语义的应用层协议。 不…...
Linux-笔记 samba实现映射网络驱动器到Win 10
前言 之前通过网上的方法成功映射后,现如今在自己电脑想实现映射服务器共享文件夹到Win 10端发现对之前的方法没有总结导致细节出问题,特此写下笔记。 场景 在服务器编译好代码生成镜像后,在Win10端采用软件烧写镜像,但是镜像在服…...
【技巧】Leetcode 67. 二进制求和【简单】
二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” 输出:“10101” 解题思路 …...
vue项目问题汇总
1.el-select: 下拉框显示到了top:-2183px , 添加属性 :popper-append-to-body"false" 2. el-upload: 选过的文件在使用过后记得清空,因为如果有limit1的时候,没有清空会导致不触发onchange 使用自定义上传方法http-request的时…...
Android 工程副总裁卸任
Android 工程副总裁卸任 Android工程副总裁Dave Burke宣布,他将辞去领导Android工程的职位,将重心转向“AI/生物”项目。不过,他并没有离开Alphabet,目前仍将担任Android系统开发顾问的角色。 Burke参与了Android系统的多个关键…...
Qt 6.13
作业: #include "mywidget.h"mywidget::mywidget(QWidget *parent): QWidget(parent) {this->setStyleSheet("background-color:white");this->resize(600,600);this->setWindowFlag(Qt::FramelessWindowHint);this->setWindowTit…...
发布自己的c#包到nuget
1)创建自己的nuget账号 NuGet Gallery | Home 2)在Rider中-->项目邮件-->properties 注意:必须勾选生成nuget包 3)编译后,将生成一个包 4)点击上传包 5)将之前的nuget包拖拽过来,点击上传即可,如果有不对的比如…...
【学习笔记】MySQL(Ⅲ)
MySQL(Ⅲ) 11、 进阶篇 —— 视图 11.1、概述 11.2、基本语法 11.3、检查选项 CASCADED 11.4、检查选项 LOCAL 11.5、视图的更新原则12、 进阶篇 —— 存储过程 12.1、概述 12.2、基本语法 12.3、系统变量 12.4、用户定义变量 …...
STM32项目分享:心率血氧手环(可报警)
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...
前端面经总结、学习【2023秋招】
目录 1、浏览器输入URL发生了什么?2、跨域是什么?如何解决跨域问题?3、cookie 是什么?4、cookie 能做什么? 1、浏览器输入URL发生了什么? URL解析:判断浏览器输入的是搜索内容还是URLÿ…...
Linux DMA-Buf驱动框架
一、DMABUF 框架 dmabuf 是一个驱动间共享buf 的机制,他的简单使用场景如下: 用户从DRM(显示驱动)申请一个dmabuf,把dmabuf 设置给GPU驱动,并启动GPU将数据输出到dmabuf,GPU输出完成后…...
MySQL之优化服务器设置(三)
优化服务器设置 InnoDB表空间 InnoDB把数据保存在表空间内,本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间实现很多功能,并不只是存储表和索引。它还保存了回滚日志(旧版本行)、插入缓冲(Insert Buffer)、双写缓冲(Doublewrite …...
如何实现 Python 源码压缩加密常用解决方案详细教程(更新中)
Python是一种高级的、解释型的、面向对象的编程语言,Python 码简洁易读,并且Python语言跨平台,拥有丰富的标准库和第三方库,深受开发人员的喜爱。 Python 程序扩展名 .py:这是 Python 程序的标准文件扩展名。当你创建…...
SAP Build 2-PDF数据提取与决策
0. 安装desktop agent 在后续过程中发现要预先安装desktop agent,否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…...
【回溯】Leetcode 77. 组合【中等】
组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 解题思路 定义递归函数࿱…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
