计算机图形学入门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], ] 解题思路 定义递归函数࿱…...
基于 4SAPI 的企业文档智能处理系统:效率提升 20 倍,信息提取准确率 95%
前言 在数字化转型的今天,企业积累了海量的非结构化文档数据,包括合同、财务报表、技术手册、产品说明书、会议纪要、法律文件等。这些文档中蕴含着企业最核心的知识和资产,但传统的人工文档处理模式已经成为企业数字化的最大瓶颈࿱…...
深度解析:libiec61850开源库如何解决电力系统通信的三大核心挑战
深度解析:libiec61850开源库如何解决电力系统通信的三大核心挑战 【免费下载链接】libiec61850 Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850 在电…...
实战指南:VRM-Addon-for-Blender 终极VRM格式导入导出解决方案
实战指南:VRM-Addon-for-Blender 终极VRM格式导入导出解决方案 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.1 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender VRM(…...
PHP WebSocket隧道实现SOCKS5代理:在受限主机环境下的网络出口方案
1. 项目概述:一个在特定托管环境下的轻量级SOCKS5代理方案最近在折腾一些需要稳定网络环境的小项目,尤其是在一些资源受限的海外托管平台上,直接访问某些服务或进行数据抓取时,经常会遇到IP限制或连接不稳定的问题。这时候&#x…...
Swift原生大语言模型推理引擎llmfarm_core.swift集成与优化指南
1. 项目概述:一个为Swift生态打造的本地大语言模型推理引擎 最近在折腾一个iOS上的AI应用,想把一些轻量级的开源大语言模型(LLM)直接跑在手机端。大家都知道,现在主流的LLM推理框架,像llama.cpp、ollama&am…...
ESP32-C3原理图设计避坑指南:从电源到天线,新手最容易忽略的7个细节
ESP32-C3原理图设计避坑指南:从电源到天线,新手最容易忽略的7个细节 第一次接触ESP32-C3原理图设计时,很多开发者会直接参考官方规格书,但实际调试时却发现各种奇怪的问题:电源不稳定导致Wi-Fi断连、复位电路响应迟缓、…...
U-Boot分析【学习笔记】(2)
3. U-Boot 编译 在上篇文章U-Boot分析 【学习笔记】(2)中,给出了基于imx6ull裁剪后的U-Boot源码结构图,但这并不意味着把其他文件进行删除,而是通过配置(.config)的方式使编译时只选取所需要的文件进行操作。 保持源…...
凡亿AD22--原理图元件复制、剪切、旋转、镜像
核心作用:这4种操作是原理图布局的基础,熟练掌握可大幅提升绘制效率,让元器件布局更规范、信号流向更清晰,提升原理图可读性。一、核心操作详解所有操作均基于「选中元件」为前提(单个元件点击选中,多个元件…...
ARM RAS架构:错误记录与注入机制详解
1. ARM RAS架构概述在现代计算系统中,可靠性、可用性和可服务性(Reliability, Availability, and Serviceability, RAS)已成为关键设计指标。ARM架构通过一系列硬件机制实现这些特性,其中错误记录与注入机制是核心组成部分。这套机制允许系统检测、记录硬…...
创业团队如何利用Taotoken进行多模型选型与成本控制
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业团队如何利用Taotoken进行模型选型与成本控制 对于初创团队的技术负责人而言,在有限的预算下既要满足快速迭代的产…...
