计算机图形学 | 可编程渲染管线

基于STM32平衡小车设计 随着智能硬件的发展,基于STM32的两轮智能平衡车作为一种新型的智能移动工具,具备较高的应用价值。本文旨在设计并实现一款基于STM32微控制器的智能平衡车系统,提升其稳定性和操控性,探索如何通过传感器数据和控制算法实现精确平衡控制。 本设计基于STM32微控制器,选择了STM32F103系列作为核心控制器,具有足够的处理能力和丰富的外设接口。系统通过MPU6050传感器获取三轴加速度和三轴陀螺仪数据,实现实时姿态检测。电机驱动部分采用合适的驱动模块,能够控制两个直流电机,并支持PWM调速。设计中还包括OL 阅读详情

华中科技大学《计算机图形学》课程

MOOC地址:计算机图形学(HUST)

计算机图形学 | 可编程渲染管线

3.1 从固定到可编程

图形编程的发展

早期的图形编程

在这里插入图片描述

那些用来绘制图元及其属性的对应函数库不存在或非常低级;

不具体硬件相关,不具备可移植性。

程序员有很大的控制权,耗费时间。

图形标准的产生

在这里插入图片描述

  • 图形核心系统(Graphical Kernel System,GKS)
  • 程序员层次式交互图形系统(Programmer’s Hierarchical Interactive Graphics System,PHIGS)
  • 开放的图形库( Open Graphics LibraryOpenGL )

它们都与设备无关。

固定管线

图形API提供了一个对硬件进行操作的标准接口;从内部实现上来说,API对程序员提出的各种绘制图元或属性的请求都采用固定的方式来处理。

这种内部实现方式通常称为固定功能渲染流水线。

对程序员来说,控制权减少,非常方便。

典型的光栅扫描图形显示子系统:

在这里插入图片描述

流水线的概念:

在这里插入图片描述

在这里插入图片描述

固定到可编程:钩函数hooks的出现突破固定功能流水线的限制,使用可编程着色器修改流水线中某些特定步骤的行为。

在这里插入图片描述

GPU渲染管线

渲染管线的功能

决定在给定虚拟相机、三维物体、光源、照明模式,以及纹理等诸多条件的情况下生成或绘制一幅二维图像的过程。

在这里插入图片描述

流水线中的三个概念阶段

应用阶段

将需要在屏幕上显示出来绘制的几何体,也就是绘制图元,比如点、线、矩形等输入到绘制管线的下一个阶段。

具体包括图元的顶点数据、摄像机位置、光照纹理等参数。

几何阶段

几何阶段需要将顶点数据最终进行屏幕映射。

这其中需要:

  • 将各个图元放入到世界坐标系中,也就是进行模型变换;
  • 根据光照纹理等计算顶点处材质的光照着色效果;
  • 根据摄像机的位置、取景范围进行观察变换和裁剪;
  • 最后进行屏幕映射,也就是把三维模型转换到屏幕坐标系中

光栅化阶段

光栅化部分的输入是经过变换和投影后的顶点、颜色以及纹理坐标,它的工作是给每个像素正确配色,以便绘制整幅图形。

由于输入的是三角形顶点,所以需要根据三角形表面的差异,逐个遍历三角形计算各个像素的颜色值。之后根据其可见性等进行合并得到最后的输出。

在这里插入图片描述

实例:

在这里插入图片描述

3.2 探秘GPU渲染管线

GPU渲染管线

在这里插入图片描述

几何阶段

在这里插入图片描述

在这里插入图片描述

光栅化阶段

在这里插入图片描述

片元操作:

在这里插入图片描述

3.3 着色器编程

着色器语言

在这里插入图片描述

在这里插入图片描述

Phong光照明模型的综合表述:

由物体表面上一点P反射到视点的光强I为环境光的反射光强、理想漫反射光强和镜面反射光强的总和。

I = I a K a + I p K d ( L × N ) + I p K s ( R × V ) n I=I_aK_a+I_pK_d(L×N)+I_pK_s(R×V)^n I=Ia​Ka​+Ip​Kd​(L×N)+Ip​Ks​(R×V)n

在这里插入图片描述

GLSL

OpenGL的着色器语言GLSL,也就是OpenGL Shading Language。

  • 顶点着色器(Vertex Shader)
  • 几何着色器(Geometry Shader)
  • 曲面细分着色器(Tessellation Shader)
  • 片元着色器(Fragment Shader)

在OpenGL中使用着色器的流程:

  1. 创建着色器对象
  2. 源码关联到着色器对象
  3. 编译着色器
  4. 创建一个程序对象
  5. 创建一个程序对象

与OpenGL的通信:

在这里插入图片描述

数据类型:

  • 标量:整数(int)、无符号整数(uint)、布尔类型(bool)及浮点数(float)
  • 矢量:一个矢量可以有2、3、4个分量
  • 矩阵
  • 结构和数组:结构体的成员或者数组的基类型可以为任意的数据类型

控制结构:

  • 循环结构:for、while和do-while
  • 选择结构:if-then、if-then-else,Glsl3.0版本引入了switch结构

EBO、VBO和VAO

EBO(Element Buffer Object,也叫IBO:Index Buffer Object):索引缓冲区对象,这个缓冲区主要用来存储顶点的索引信息。

在这里插入图片描述

VBO(Vertex Buffer Object):顶点缓冲区对象,主要用来存储顶点的各种信息。

好处:模型的顶点信息放进VBO,这样每次画模型时,数据丌用再从CPU的势力范围内存里取,而是直接从GPU的显存里取,从而提高效率。

VAO(Vertex Arrary Object):顶点数组对象

VAO是一个保存了所有顶点数据属性的状态结合,它存储了顶点数据的格式以及顶点数据所需的VBO对象的引用。VAO本身并没有存储顶点的相关属性数据,这些信息是存储在VBO中的,VAO相当于是对很多个VBO的引用,把一些VBO组合在一起作为一个对象统一管理。

VAO和VBO之间的关系:

在这里插入图片描述

例程

方法一:VAO+VBO绘制四边形

// 渲染之前VAO/VBO的绑定生成  
// 顶点数据  
float vertices[] = {  
// 第一个三角形  
0.5f, 0.5f, 0.0f, // 右上  
0.5f, -0.5f, 0.0f, // 右下  
-0.5f, -0.5f, 0.0f, // 左下  
// 第二个三角形  
-0.5f, -0.5f, 0.0f, // 左下  
0.5f, 0.5f, 0.0f, // 右上  
-0.5f, 0.5f, 0.0f // 左上  
};  
// 生成立方体的VAO、VBO  
unsigned int VBO, VAO;  
glGenVertexArrays(1, &VAO);  
glGenBuffers(1, &VBO);  
// 绑定VAO  
glBindVertexArray(VAO);  
// 绑定VBO并传入顶点数据  
glBindBuffer(GL_ARRAY_BUFFER, VBO);  
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);  
// 设置顶点属性指针  
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);  
glEnableVertexAttribArray(0);  
// 解绑VBO  
glBindBuffer(GL_ARRAY_BUFFER, 0);  
// 解绑VAO  
glBindVertexArray(0);  
// 渲染时  
// 使用之前链接好的着色器程序  
glUseProgram(shaderProgram);  
// 绑定VAO  
glBindVertexArray(VAO);  
// 用VAO绘制四边形  
glDrawArrays(GL_TRIANGLES, 0, 6);

方法二:VAO+VBO+EBO绘制四边形

// 渲染之前VAO/VBO/EBO的绑定生成
// 顶点数据
float vertices[] = {
0.5f, 0.5f, 0.0f, // 右上
0.5f, -0.5f, 0.0f, // 右下
-0.5f, -0.5f, 0.0f, // 左下
-0.5f, 0.5f, 0.0f // 左上
};
// 索引数据(注意这里是从0开始的)
unsigned int indices[] = {
0, 1, 3, // 第一个三角形
1, 2, 3 // 第二个三角形
};
// 生成立方体的VAO、VBO和EBO
unsigned int VBO, VAO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
// 绑定VAO
glBindVertexArray(VAO);
// 绑定VBO并传入顶点数据
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 绑定EBO并传入索引数据
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
// 设置顶点属性指针
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// 解绑VBO
glBindBuffer(GL_ARRAY_BUFFER, 0);
// 注意丌要解绑EBO,因为EBO存储在VAO中
//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
// 解绑VAO
glBindVertexArray(0);
// 渲染时
// 使用之前链接好的着色器程序
glUseProgram(shaderProgram);
// 绑定VAO(实际上丌需要每次绑定)
glBindVertexArray(VAO);
// 用EBO绘制四边形
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
强化学习在视觉导航中的应用 强化学习在视觉导航中的应用​ ,人工智能,计算机视觉,大模型,AI,强化学习(Reinforcement Learning, RL)是一种通过智能体(Agent)与环境进行交互,以最大化累积奖励为目标的机器学习范式。它不依赖于预定义的规则或大量标注数据,而是让智能体在试错过程中学习最优策略。计算机视觉(Computer Vision)则赋予智能体 “观察” 环境的能力,使其能够从图像或视频中提取有用信息。 阅读详情

相关推荐

Edge浏览器IE模式全攻略:从企业应用到老旧网站兼容(含常见问题解答)

本文详细解析了微软Edge浏览器的IE模式,这是解决企业遗留系统与老旧网站兼容性问题的关键技术。文章从核心原理出发,提供了从个人用户临时启用到企业级组策略部署的完整配置指南,并深入探讨了文档模式调优、ActiveX控件处理等高级技巧,最后汇总了常见问题排查与安全实践,帮助用户高效平衡兼容性与现代化浏览体验。

weixin_29227425的博客 612

计算机图形学笔记(一)渲染管线概述

计算机图形学笔记—渲染管线。

qq_15017307的博客 1万+

从零开始:用Kimi API和LangChain打造智能写作助手

本文详细介绍了如何从零开始,利用Kimi API提供的强大AI大模型能力,结合LangChain框架构建一个智能写作助手。通过实战演示了环境搭建、核心写作链构建、以及引入检索增强生成和智能体等进阶功能,旨在解决长文档创作、事实准确性等痛点,打造一个能理解意图、调用工具并保持记忆的智能创作伙伴。

weixin_29294395的博客 140

可编程渲染管线(SRP)_学习笔记

Unity 的可编程渲染管线 (Scriptable Render Pipeline, SRP) 是一项可以通过 C# 脚本来控制渲染的功能。SRP 技术可以强化通用渲染管线 (URP) 和高清渲染管线 (HDRP)。

不负青春 3741

Oracle-OGG trail 文件大小引起的进程异常 OGG-01172

监控OGG目标端进程,其中一个进程异常,状态为 ABENDED,start repa 执行失败。进入OGG报告目录检查运行报告 2015-04-20 09:38:36 ERROR OGG-01172 Discard file (/ogg/oggrm/11.2/dirdat/repa.dsc) exceeded max bytes (2000000000). 总结处理方法,从根本上解决问题。

xdyzgjy的专栏 7957

emir分析RC corner如何选择

power analysis阶段 RC corner的选择

weixin_61954252的博客 3596

Real-Time Rendering 第四版 图形学渲染管线概述 翻译整理

渲染管线并行阶段前一个阶段渲染管线四个阶段应用阶段几何处理阶段光栅化阶段像素处理阶段。

长脖鹿的博客 1417

XianYuAutoDeliveryX:基于闲鱼API与大模型的智能自动发货系统实践

本文详细介绍了如何利用XianYuAutoDeliveryX系统,结合闲鱼API与大语言模型,构建一个智能自动发货解决方案。该系统能实现买家付款后秒级自动发货,并通过对接ChatGPT等大模型智能回复买家咨询,有效解放卖家时间,提升虚拟商品店铺的运营效率和客户体验。

bush的博客 1022

计算机图形学七渲染管线和着色器Rendering Pipeline And Shader

计算机图形学基础图形渲染管线

weixin_44683202的博客 829

把机器学习“搬进”数据库:SAP HANA PAL 快速上手与 ABAP AMDP 实战

摘要:本文探讨了SAP HANA PAL(Predictive Analysis Library)在企业数据分析中的实践应用。PAL通过将机器学习算法下推到数据库内部执行,有效解决了大数据量场景下的数据搬运瓶颈和治理成本问题。文章详细介绍了PAL的核心功能(包括聚类、分类、回归等10类算法)、使用前提(版本、组件和权限要求)以及通过AMDP实现ABAP与PAL集成的技术方案。重点阐述了参数表设计理念和两个典型应用场景:利用PageRank算法分析企业权限网络关系,以及通过PAL_SCALE进行特征预处理。文

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5740

运维系列【仅供参考】:RustDesk部署疑难解答

RustDesk部署疑难解答

weixin_54626591的博客 283

计算机图形学入门11:图形管线与着色器

计算机图形学入门,图形管线,渲染管线。

YanisWu的博客 943

手把手教你用ESP32-C3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-C3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5544

《计算机图形学》学习笔记(三):可编程渲染管线

3.可编程渲染管线 3.1 渲染管线的发展历程 1.图形编程的发展 早期的图形编程:调用硬件供货商提供的函数库(用来绘制图元及其属性的函数库不存在 图形标准的产生:硬件供货商提供标准图形数据库,使得能够在设备无关的方式下生成图像 OpenGL PHISS(Programmer's Hierarchical Interactive Graphics Sys...

大鹏的blog 1083

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机图形学之渲染管线

渲染管线描述了一系列连续的步骤,这些步骤从原始的三维模型数据出发,经过一系列计算和处理,最终转化成能在屏幕上看到的像素。它主要发生在图形处理器(GPU)上,特别是在现代图形硬件中,它被设计为高度并行处理以加速渲染过程。

weixin_41150257的博客 1004

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

shader开发_3.渲染管线

shader 以可编程性可分为 固定渲染管线  和  可编程渲染管线 其中固定渲染管线主要是在老旧的显卡上,当时显卡还不具备编程能力 固定的由于都是设置各个功能 打开关闭 所以自定义功能不强 所以现在都是可编程 (固定的就跳过了 ) 下面是一个例子 Shader "Custom/gudingguanxian" { Properties { _Color ("主颜色

大罗 398

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机图形学与渲染管线基础

什么是计算机图形学? 计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。(百度百科) 二维如图片、文字等; 三维如模型、贴图等; 显示器的栅格就是显示器上一个个小的像素点。 在PS中画一条斜线,放大之后会出现一个个小的栅格,锯齿状说明已经“走样” 现代光栅扫描系统 什么是渲染管线? 固定功能渲染流水线: 固定功能渲染流水线操作方便、权限少、与硬件本身无关,可跨平台。 可编程渲染流水线: .

weixin_45141504的博客 507

华科_图形学笔记_00_图形学课程导学

计算机图形学_华中科技大学_中国大学MOOC(慕课) 流水线的三个概念阶段 应用阶段 -几何阶段 -光栅化阶段 引入 法线贴图 物理渲染 光线追踪 延迟渲染 理论体系 基础篇 -应用程序阶段 -几何阶段 -光栅化阶段 -高级话题 实验框架 欢迎来到图形世界 浅析图形系统 图形显示子系统 可编程渲染管线 ...

精密时空设计局 183

华科_图形学笔记_03_可编程渲染管线

计算机图形学_华中科技大学_中国大学MOOC(慕课) 3.1_从固定到可编程 提纲 图形编程的发展 标准图形函数库越来越常见 固定功能渲染流水线 渲染流水线的起点是CPU,在应用程序阶段,需要CPU把数据从硬盘加载到系统内存中,然后网格和纹理数据又到加载到显卡的存储空间,也就是显存中,之后当GPU从CPU那里得到渲染命令后,会执行一系列的渲染工作,也就是说有一系列的工序. 流水线的概念 通过引入流水线可以有效的提高单位时间的效率,因此GPU在渲染.

精密时空设计局 472

有关渲染与着色器的文章(收集)

学习shader之前必须知道的东西之计算机图形学 可编程渲染管线与着色器语言 转载于:https://www.cnblogs.com/leesymbol/p/4429181.html

weixin_30274627的博客 75

RenderHelp核心特性揭秘:单文件实现渲染管线的终极方案

GitHub 加速计划 / re / RenderHelp 是一款面向初学者的可编程渲染管线实现,通过单个头文件即可帮助开发者快速掌握渲染技术的核心原理。它不仅包含完整的矢量/矩阵运算库和位图处理功能,还支持顶点着色器、像素着色器等现代渲染特性,是学习计算机图形学的理想工具。 ## 为什么选择RenderHelp?单文件的强大优势 对于图形学新手而言,复杂的依赖关系和庞大的代码库往往成为入门障

gitblog_01003的博客 425

图形学笔记

渲染管线分为三个过程,应用程序阶段(cpu处理需要渲染的图元,输出顶点数据),几何化阶段(gpu,处理顶点数据,经过各种坐标系变换,顶点着色然后进行屏幕映射等输出三角形顶点),光栅化阶段(gpu,输入三角形顶点,算出三角面,覆盖的像素(片元),片元着色,然后合批(远近关系需要进一步融合)得到最终的像素点信息)最终输出帧缓存,屏幕定时会读取帧缓存输出到屏幕。帧缓存存了屏幕的颜色信息,分为颜色位面法(R,G,B三种颜色三个位面融合)和颜色索引表(存了个颜色表,帧缓存里面存的是每个像素点颜色在表里的索引)。

abuzhiqusha的博客 102

阿库娅的计算机图形学笔记,Games101篇(八)

那么我只要求出这个面的法线,并对这个法线进行操作,那么整个面就会根据法线的计算得到颜色应该的亮度。

Kaliaailia的博客 994

渲染管线

渲染管线的概念 计算机的渲染管线是实时渲染的重要过程。渲染管线是以流水线的形式,讲一个模型的顶点坐标,发现,切线,颜色等数据从CPU传递给GPU,然后通过GPU进行计算,最终将这些顶点的数据通过插值的形式显示到屏幕上,最终能从屏幕上看到该模型的样子。渲染管线通常被分为四个阶段:应用阶段,几何阶段,光栅化阶段,像素处理阶段。接下来介绍一下每个阶段的大概任务。 (1) 应用阶段:应用阶段是指在CPU段进行处理的阶段,包括物理碰撞检测、物理模拟、动画计算等任务,对于3D游戏来说,游戏中包含大量的模型,3D模型中保

白小飞 999

计算机图形学基础:从原理到实践应用

计算机图形学是研究数字信息可视化呈现的核心技术,涉及建模、渲染和动画三大基础模块。其技术原理基于线性代数和几何变换,通过GPU加速的渲染管线实现高效图形处理。在工程实践中,着色器编程和纹理映射技术尤为关键,如GLSL着色器控制光照效果,UV坐标实现纹理贴图。该技术广泛应用于游戏开发、影视特效和医疗可视化等领域,其中基于物理的渲染(PBR)和实时光线追踪代表了当前技术前沿。学习路径建议从OpenGL/WebGL入手,结合'头歌平台'的实践项目,逐步掌握图形API和3D数学基础。

weixin_42525385的博客 288

实时渲染引擎底层核心技术解析:从光栅化到光线追踪的架构演进

实时渲染引擎的演进本质上是人类对物理世界数字化复现的不懈追求。当光线追踪开始逼近现实世界的物理规律,当神经网络开始理解材质的内在属性,我们正在见证计算机图形学从"模拟现实"向"创造现实"的历史性跨越。这不仅是技术的胜利,更是人类认知边界的又一次突破。

2501_91980039的博客 1075
上一篇: 《C++ Primer Plus》(第6版)第13章编程练习
下一篇: 计算机图形学 | 搭建OpenGL环境
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值