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)的更多相关文章

  1. Rendering pipeline overview(读书笔记1 --- Real-Time rendering)

    1. Rendering pipeline的作用就是在给定的虚拟相机.三维物体.光源.着色方程式.纹理等的条件下产生(渲染)二维图像 2. pipeline包含很多个stage,其效率由最慢的stag ...

  2. Rasterizer Stage(读书笔记3 --- Real-Time rendering)

    rasterizer stage的目标:计算和设置每个像素的颜色.将屏幕空间的二维顶点和每个顶点的shading信息转换为屏幕上的像素. rasterizer stage可以分为几个阶段:triang ...

  3. DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)

            本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...

  4. Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)

    提要 渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,object,灯光,纹理等等,生成一副2D的图像. 最基础的渲染管线如下图所示: 主要的阶段包括三个:App ...

  5. Shader、Draw Call和渲染管线(Rendering Pipeline)

    翻阅了很多资料,也做了不少笔记,决定还是对渲染进行一个总结,以巩固所学的东西. <Real-Time Rendering, Third Edition>   (PDF的配图链接)将一个渲染 ...

  6. Spark调度管理(读书笔记)

    Spark调度管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark调度管理 本文主要介绍在单个任务内Spark的调度管理,Spark调度相关概念如 ...

  7. 《Linux内核设计与实现》读书笔记(十七)- 设备与模块

    本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...

  8. 高屋建瓴 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 ...

  9. 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记

        系列文章目录:     <微服务设计>读书笔记大纲 一.CI(Continuous Integration)简介  CI规则1:尽量频繁地把代码签入到分支中以进行集成 CI规则2: ...

随机推荐

  1. 数迹学——Asp.Net MVC4入门指南(5):从控制器访问数据模型

    MovieController中的方法Index()代码,初认识,应该有很多理解错误的地方,暂时这么记忆吧,待随后修改 Index()代码: @model IEnumerable<MVCMovi ...

  2. Mysql(一)

    一.Mysql简介 Mysql是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下.特点:其体积小.速度快.开源. 分为社区办和商业版,其社区版性能卓越. 二.Ubun ...

  3. java1234教程系列笔记 S1 Java SE chapter 02 lesson 03 java基本数据类型

    第二章 第三节 数据类型 3.1 分类 基本数据类型.引用类型 3.2整型 byte 8 short 16 int  32 long 64 作业: A:1-10求和 B:float double 的最 ...

  4. MySQL Innodb数据库性能实践——热点数据性能

    摘要: 对于大部分的应用来说,都存在热点数据的访问,即:某些数据在一定时间内的访问频率要远远高于其它数据. 常见的热点数据有“最新的新闻”.“最热门的新闻”.“下载量最大”的电影等. 为了了解MySQ ...

  5. 14、java中的equals()和toString()方法

    /* 所有对象的父类Object Object中的方法: equals() 对象是否相同的比较方法 toString()对象的字符串表现形式 */ class Person { String name ...

  6. Play with docker 1.12

    Docker v1.12 brings in its integrated orchestration into docker engine. Starting with Docker 1.12, w ...

  7. 前端 动态表单提交(post、put)

    第一步:form表单定义统一属性 <input type="text" class="form-value" /> 第二步:获取所有值 var fo ...

  8. 自实现CAS原理JAVA版,模拟下单库存扣减

    在做电商系统时,库存是一个非常严格的数据,根据CAS(check and swap)原来下面对库存扣减提供两种方法,一种是redis,一种用java实现CAS. 第一种 redis实现: 以下这个类是 ...

  9. 生成均值文件mean.binaryproto

    [感谢:http://www.cnblogs.com/denny402/p/5102328.html] compute_image_mean.bin生成均值文件mean.binaryproto: ca ...

  10. ubuntu 安装redis两种方式 教程

    方式一: 下载地址:http://redis.io/download,下载最新文档版本. 本教程使用的最新文档版本为 2.8.17,下载并安装: $ wget http://download.redi ...