Geometry Stage in Rendering pipeline (读书笔记2 --- Real-Time rendering)
Geometry Stage一般包含下面几个阶段

1. Model & View Transform(模型和视图变换) --- 模型空间--> 世界空间
模型变换:每个模型经过模型变换来定位,一个模型可能有多个模型变换,譬如一个模型存在于不同的地方,以不同大小存在于同一个场景等。模型变换改变的是模型的顶点和法线
模型坐标:一个物体的坐标
世界坐标:模型坐标经过模型变换得到世界坐标
世界空间:独一无二,当所有模型经过各自的模型变换,它们都存在于同一个空间,相机(观察者)在世界空间中也有自己的位置和方向
相机空间:将相机放到原点,让它看向-z轴方向(x轴指向右,y轴指向上)

2. Vertex Shading(顶点着色)
shading: 决定光在一种材料上的效果的操作。包含计算在物体上很多点的shading方程。有些计算是在geometry stage进行的,有些是在光栅化阶段进行的
顶点着色需要的数据:每个点的位置,法线,颜色,或者其他需要用来计算着色方程的数字信息
顶点着色通常发生在世界空间,但有时候为了方便,会变换相机和光源到其他空间(模型空间)
vertex shading result: 颜色,向量,纹理坐标,等等
3. 投影(Projection) --- 从三维变为二维的过程
投影:将视景体(view volume)转换为CCV(规范立方体,Canonical view volume),CCV的极值为(−1,−1,−1)和(1, 1, 1).
通常有两种投影方法:正投影和透视投影
正投影:平行线投影后依然平行
透视投影:离相机远的物体会越小,平行线可能会相交,透视投影的view volume叫视锥体,是一个底部为方形的被截断的金字塔形

正投影和透视投影变换都由4X4矩阵构成,模型经过这两个变换会被称为归一化设备坐标
4.clipping(裁剪)
只有完全或者部分在view volume(视景体)里面的primitives才需要被画到屏幕上,完全在view volume之外的primitives不需要被render,部分在view volume里面的primitivies需要clipping。被clip之后会生成交界点处的新的顶点数据。
primitives总是在unit cube中被裁剪的。

除了view volume的六个clipping plane外,用户可以自己定义额外的clipping plane来去除可见物体。
clipping stage和screen mapping stage是硬件中的固定功能,不能编程,前面的其他stage都是可编程的
5. screen mapping(屏幕映射,OpenGL中的视口变换)
只有在view volume里面被裁剪过的primitives才会传到screen mapping阶段,坐标仍然是三维的。
x和y坐标被转换为屏幕坐标。屏幕坐标和z坐标合起来叫做窗口坐标。z坐标的值(-1<=z<=1)不受screen mapping的影响。

举个例子,比如上个阶段中得到了一个顶点的坐标为(0,0,0.5,1),根据这个坐标,该顶点位于投影平面的正中间。如果将该点映射到大小为50*50的窗口上时,那么它应该位于屏幕的中间,坐标为(25,25,0.5,1)。当然这里深度值0.5是不会改变的。有的同学肯定有疑问了,既然投影到了窗口上,那么还要深度值0.5干什么?这里要注意的是,虽然在窗口上显示时只需要x,y坐标就够了,但是要在2D窗口上显示3D图形时深度值是不可少的。这里的深度值不是用于显示,而是用于在光栅化的时候进行深度测试。
注意不同点:OpenGL以左下角为最小值(笛卡尔坐标系),DirectX以左上角为最小值
Geometry Stage in Rendering pipeline (读书笔记2 --- Real-Time rendering)的更多相关文章
- Rendering pipeline overview(读书笔记1 --- Real-Time rendering)
1. Rendering pipeline的作用就是在给定的虚拟相机.三维物体.光源.着色方程式.纹理等的条件下产生(渲染)二维图像 2. pipeline包含很多个stage,其效率由最慢的stag ...
- Rasterizer Stage(读书笔记3 --- Real-Time rendering)
rasterizer stage的目标:计算和设置每个像素的颜色.将屏幕空间的二维顶点和每个顶点的shading信息转换为屏幕上的像素. rasterizer stage可以分为几个阶段:triang ...
- DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)
提要 渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,object,灯光,纹理等等,生成一副2D的图像. 最基础的渲染管线如下图所示: 主要的阶段包括三个:App ...
- Shader、Draw Call和渲染管线(Rendering Pipeline)
翻阅了很多资料,也做了不少笔记,决定还是对渲染进行一个总结,以巩固所学的东西. <Real-Time Rendering, Third Edition> (PDF的配图链接)将一个渲染 ...
- Spark调度管理(读书笔记)
Spark调度管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark调度管理 本文主要介绍在单个任务内Spark的调度管理,Spark调度相关概念如 ...
- 《Linux内核设计与实现》读书笔记(十七)- 设备与模块
本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...
- 高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)
Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...
- 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记
系列文章目录: <微服务设计>读书笔记大纲 一.CI(Continuous Integration)简介 CI规则1:尽量频繁地把代码签入到分支中以进行集成 CI规则2: ...
随机推荐
- Ext GridPanel
Extjs GridPanel用法详解 创建GridPanel 要使用GridPanel,首先要定义Store,而在创建Store的时候必须要有Model,因此我们首先来定义Model: //1.定义 ...
- mongodb 3 常用命令操作
操作命令详见,这个归类很好,有些教程乱麻麻的 http://www.tuicool.com/articles/j2ueau db.createUser({user:"zhihuiroot&q ...
- 性能测试工具 转自https://yq.aliyun.com/articles/35149?spm=5176.100239.blogcont35147.8.rsow6k
摘要: 继续这个系列的学习,这一节重点介绍目前流行的性能测试工具以及如何选择适合项目的工具.在此之前,我已经对性能测试工具的原理与架构做了分析. http://www.cnblogs.com/fnng ...
- NSString和NSMutableString常用方法+NSArray常用代码 (转)
常见的NSString和NSMutableString方法: NSString方法: [plain] view plaincopy +(id) stringWithContentsOfFile:p ...
- CentOS MySQL 配置
问题: MySQL安装后root用户无法连接,提示 ERROR 1045 (28000): Access denied for user ’root’@’localhost’ (using passw ...
- asp.net中使用基于角色role的Forms验证
http://www.cnblogs.com/yao/archive/2006/06/24/434783.html asp.net中使用基于角色role的Forms验证,大致经过几下四步:1.配置系统 ...
- 13、java中的多态
1,多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以接收自己的子类对象.2,多态的前提 必须是类与类之间有关系.要么继承,要么实现. 通常还有一个前提:存在覆盖. 3,多态的好处 多态的 ...
- Rails 之微信开发 : OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
微信公众平台,使用Ruby On Rails + Win7 在取得OpenID时,如果简单的使用http.get方法,会出现如下 SSL_connect returned=1 errno=0 stat ...
- 单例实现c++
#include <iostream> using namespace std; class Singleton { public: static Singleton *GetInstan ...
- JPA(Hibernate) @OneToMany 两种例子
环境:Spring Data Jpa,hibernate或者其他jpa实现也是一样的:Spring Boot 场景:User和Role,一个User要对应多个Role. 第一种方式,没有中间关系表,直 ...