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: ...
随机推荐
- JSBinding+Bridge.NET:生成绑定(导出)
将框架代码导出到 JavaScript.就可以在 JavaScript 中调用 框架代码 的功能. 注意,这个功能是在 Js工程中做的,Cs工程没有这回事. 如何导出? 1. 将需要导出的类添加到 J ...
- 微信Android客户端架构演进之路
这是一个典型的Android应用在从小到大的成长过程中的“踩坑”与“填坑”的历史.互联网的变化速度如此之快,1年的时间里,可以发生翻天覆地的变化.今天在这里,重新和大家回顾微信客户端架构的演进过程,以 ...
- Head First 设计模式之适配器模式与外观模式
Head First设计模式之适配器模式与外观模式 前言: 之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西.这样就可以在设计 ...
- jersy服务,将图片发送另个服务器,再将异步返回
今天在学习新项目时,遇到了jersy服务,完成,将图片发送到另一台服务器.下面介绍一下jersy服务的一个简单例子. 1.建立一个jersy一个java项目,先导入jersy服务相应的jar包 com ...
- Debian MySQL 卸载和安装 PHP安装
如果是apt-get安装的 sudo apt-get --purge remove mysql-serversudo apt-get --purge remove mysql-clientsudo a ...
- Digests from CG articales
Turtle Talk Prior to the on-set motion capture, the team had the actors perform expressions while be ...
- Spring MVC4 纯注解配置教程
阅读本文需要又一定的sping基础,最起码要成功的运行过一个SpringMvc项目. 在传统的Spring项目中,我们要写一堆的XML文件.而这些XML文件格式要求又很严格,很不便于开发.而网上所谓的 ...
- 【学】ECMA6的新特性1
ECMA6的新特性1 let特性: 1.不允许重复声明 2.没有预解析 3.块级作用域 一对{}包括的区域称为代码块 块级作用域指一个变量或者函数只在该区域才起作用. 例1: console.log( ...
- 快速开发一个PHP电影爬虫
今天来做一个PHP电影小爬虫.我们来利用simple_html_dom的采集数据实例,这是一个PHP的库,上手很容易.simple_html_dom 可以很好的帮助我们利用php解析html文档.通过 ...
- OAF_文件系列9_实现OAF解析Excel并读取至数据库JXL
ddd puroder. webui. poLineExcelImport.java