《GPU编程与CG语言之阳春白雪下里巴人》 读书笔记1
Chapter2 GPU图形绘制管线
图形管线绘制三个主要阶段
应用程序阶段
- 高级语言实现
- 主要和CPU,内存打交道
- 例如:碰撞检测,场景图建立,空间八叉树更新,视锥裁剪等经典算法
- 得到几何体数据(顶点坐标,法向量,纹理坐标,纹理等),并通过数据总线传递给图形硬件(时间瓶颈)
几何阶段
- 顶点变换,光照,裁剪,投影以及屏幕映射
- 得到经过变换和投影之后的顶点坐标、颜色、纹理坐标
光栅阶段
- 为像素(pixel)正确配色
- 每个像素的信息存于颜色缓冲器(color buffer/frame buffer)
注意
涉及深度信息(Z值)的运算都是在几何阶段进行的
2.1 几何阶段
根据顶点坐标变换的先后顺序,主要有如下几个坐标空间:
- Object Space 物体坐标系/模型坐标空间
- World Space 世界坐标空间
- Eye Space 观察坐标空间
- Clip and Project Space 屏幕坐标空间
2.1.1 从Object Space 到 World Space
Ojbect Space,即物体坐标系/模型坐标系。光照计算通常发生在世界坐标系,而模型文件中的顶点法向量属于物体坐标系,必须将法向量转换到世界坐标系才可以使用。
注意:顶点坐标和法向量的转换是不同的,顶点坐标从物体坐标系转换到世界坐标系使用的是 world matrix,而法向量转换到世界坐标系中的转换矩阵是world matrix的转置矩阵,因为法向量变换的问题是由于非等比例缩放引起的,如果原来的World矩阵三个方向缩放系数相等,那么用原来的World矩阵变换法向量是没有问题的。
2.1.2 从World Space 到 Eye Space
概念
- 视锥体:以视点或摄像机为原点,由视线方向、视角和远近平面,共同组成的一个梯形三维空间
- 近平面:梯形体较小的矩形面
- 远平面:梯形体较大的矩形面,投影平面
- 视锥裁剪(Frustum Culling):在视锥体内的顶点数据是可见的,而超出部分,会被视点去除。
2.1.3 从Eye Space 到 Project and Clip Space
空间转换的裁剪过程
- 用透视变换吧顶点从视锥体中变换到裁剪空间的CVV中
- 在CVV进行图元裁剪
- 屏幕映射:将经过前述过程得到的坐标映射到屏幕坐标系上
概念
- 规范立方体(Canonical View Volume):裁剪被安排在一个单位立方体中进行,该立方体的对角顶点分别为(-1,-1,-1)和(1,1,1)。CVV的近平面的X,Y坐标对应屏幕像素坐标(左下角是0、0),Z坐标则代表画面像素深度。
图元位置及其对应处理方式
只有当图元完全或部分存在于视锥体内部时,才需要将其光栅化。
1. 当图元完全位于视锥体内时,直接进入下一阶段。
2. 当图元完全位于视锥体外时,将被剔除。
3. 当图元部分位于视锥体内时,对于部分位于视锥体内的图元进行裁剪。
2.2 Primitive Assembly && Triangle Setup
概念
- Primitive Assembly(图元装配):将顶点根据原始的连接关系(primitive)还原出网格结构。
- 网格:网格由顶点和索引组成
- 背面去除:一般顶点按照逆时针排列,有右手定则来确定三角面片的法向量,用于判断该面为正面还是反面,如果是反面,则要进行去除,较少绘制的顶点数目。
- Triangle Setup:处理三角形的过程。
补充
剪裁算法有:
1. 视域剔除
2. 背面剔除
3. 遮挡剔除
4. 视口剪裁
2.3 光栅化阶段
2.3.1 Rasterization
概念
- 光栅化:决定哪些像素被集合图元覆盖的过程。
2.3.2 Pixel Operation
概念
- Pixel Operation:又称“Raster Operation”,是在更新帧缓存前,执行最后一系列针对每个片段的操作,目的是计算出每个像素的颜色值。在这个阶段,被遮挡面被一个称为深度测试的过程消除。
Pixel Operation的过程
- 消除遮挡面
- 纹理操作(Texture Operation):根据像素的纹理坐标,查询对应的纹理值
- 混色(Blending):根据目前已经画好的颜色,与正在计算的Alpha值混合为两种颜色,作为新的颜色输出
- 滤波/滤镜(Filtering):将正在算的颜色经过某种Filtering后输出
- 将像素颜色写入帧缓存
2.4 图形硬件
首先来看一下GPU的存储架构:
概念
- Z Buffer:又称”Depth Buffer”——深度缓冲区,存放的是每个像素对应顶点空间的的距离衡量,Z值范围为[0,1],默认情况下,近裁剪面上Z值为0,远裁剪面上Z值为1。Z值的比较参考 深度缓冲区算法(depth-buffer method)。Z值并不是欧几里得距离,非线性变化。
- 模板缓冲区Stencil Buffer:通常附加在Z Buffer中,例如,15位的Z Buffer加上1位的Stencil Buffer,用来做标记,可用来表示像素对应空间点处于阴影中。
- 帧缓冲器Frame Buffer:用于存放显示输出的数据,一般为像素颜色值。Frame Buffer有时被认为是颜色缓冲器和深度缓冲的组合。
《GPU编程与CG语言之阳春白雪下里巴人》 读书笔记1相关推荐
- [你的灯亮着吗]读书笔记
把自己当成比人:把别人当成自己:把别人当成别人:把自己当成自己 动手去解决问题之前,好好想想问题的来源 如何站在各个角度来看待面临的问题,以能够知道其真正所在:如何去尝试那个最难解决真正问题的方法,并 ...
- 你的灯亮着吗阅读笔记之一
定义问题: 我们分析和解决问题时,首先要明确地定义问题.如书所云:"问题其实就是你期望的东西和你体验的东两之间的差别".我们需要搞清楚"问题是什么"和摆在你眼前 ...
- 你的灯亮着么阅读笔记3
第五章问题从哪来的.我们要探寻问题的根源,而问题的根源往往出现在自身.因此我们要时常的反思自己,是否在团队中拖了后腿,而不是一味的去指责队友对自己的埋怨.只有发现自身的问题,才能改正自我. 第六章我们 ...
- 《你的灯亮着吗》 读书笔记三
紧接<你的灯亮着吗>读书笔记二 4.这是谁的问题? 当别人可以妥善解决自己的问题时,不要越俎代庖,如果这是他们的麻烦,就让它成为他们的麻烦,如果一个人处于解决问题的位置,却并不受问题困扰, ...
- 《你的灯亮着吗》读书笔记3
终于读完了<你的灯亮着吗>,其实从总体来看,这本书给了我很大的启示. 在理解问题之前,至少要做好准备接受三种可能的出错情况:或许还可以改变问题的表述来获得不同的解决方法:当你沉迷于寻找问题 ...
- 《你的灯亮着吗》读书笔记1
你的灯亮着吗? 上帝说:"要有光."于是俺挑了这本只有50多页的书,在剩下的5天里,可以保证读完剩下的三章. 前几天我一口气看了三章,觉得这本书和<梦断代码>相比,上了 ...
- 《你的灯亮着吗?》读书笔记
第3章 你的问题是什么? 问题就是理想状态和现实状态之间的差别. 噢,年轻人,你不需要自责的.等你到了我这个年纪,就知道我们在生活中重要的事情面前是多么无能为力了. 第6章 比利反思投标案 即使问题已 ...
- 202318读书笔记|《芭蕉·芜村·一茶:俳句三圣新译300》——樱花——让一整个春夜亮起来!
202318读书笔记|<芭蕉·芜村·一茶:俳句三圣新译300>--樱花--让一整个春夜亮起来! <芭蕉·芜村·一茶:俳句三圣新译300>诗歌,词,短歌,俳句我都喜欢,读起来轻松 ...
- 读书笔记第四讲:《百万级并发商品服务架构解密》丁鸣亮
本文是读书笔记第四讲:网易考拉海购商品中心2017年商品中心架构,百万级并发商品服务 架构解密,作者:丁鸣亮 文章目录 1.前言:电商平台的商品服务 2.考拉:商品服务的"黑历史" ...
- 《你的灯亮着吗》阅读笔记
读了<你的灯亮着吗>,使我对问题的解决有了更深层次的见解.这本书告诉了我当面对问题时要发现问题的真正所在. 这本书首先提出了几个主题: 1)动手去解决问题之前,好好想想问题的来源: 2)如 ...
最新文章
- DataGridView打印类
- cocos2d游戏jsc文件格式解密,SpideMonkey大冒险
- Struts2 分割字符串标签s:generator
- 华为p4支持鸿蒙功能吗_吹过的牛都一步一步给实现了!明年华为手机支持升级鸿蒙系统!...
- 10.30 linux和windows互传文件,用户配置文件和密码配置文件,用户组管理,用户管理...
- centos出现磁盘坏掉,怎么修复和检测。
- python代码运行不了怎么办_selenium ide 生成的 Python 代码无法执行是怎么回事?
- 【计算机基础】 操作系统总结(未完)
- 开源组件是什么意思_一文读懂常用开源许可证
- golang mysql封装_自己封装的golang 操作数据库方法
- datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理
- 基于java的信访项目_基于JAVA的某省人大信访信息系统的设计与实现
- TensorFlow神经网络(七)卷积神经网络基础
- vs2010 “SetScrollSizes”: 找不到标识符
- 使用Tortoise小乌龟 git 拉取代码 报错128处理
- proteus元件图片_最完整的Proteus元件库元件名称及中英对照表下载
- (1)C# 创建控制台应用程序
- 2014年个人工作愿景
- nexus开机启动设置
- 【光剑藏书轩2021】5分钟读懂《贫穷的本质》:“穷人通常缺少信息来源”
热门文章
- Ghost XP封装教程超详细版
- Julia处理高斯光束的光斑图像
- Elasticsearch关闭自动日期检测
- problems encountered during text search
- matlab筛选excel数据统计,MATLAB读取Excel筛选符合条件的数据进行求均值等处理 程序......
- Chrome浏览器更新后,无法调用Lodop打印
- 德鲁克谈《自我管理》——《哈佛商业评论》史上最受欢迎的文章
- 通过python scrapy shell 获取对应的网页元素值
- 【毕业设计】基于大数据的招聘与租房分析可视化系统
- 尚学堂视频笔记三:容器