homogeneous clip space and NDC
CVV canonical view volume
HCS homogeneous clip space
NDC nomolized device coordinates
pipeline 的 geometry stage 的 projection前后有这样一些概念
次序 以及什么时候做了什么 哪里做的 还有那时候的维度
model --world--view space---hcs- ndc -screen coordinates
从hcs开始说
这里的h就是齐次 齐次就是三维加一维 用四维表示三维数据 便于计算
clip是在这个空间hcs做的 因为 它就叫 homo Clip space
这里做肯定也是计算方便
做完之后把w除过去 w里放的就是z 这个过程叫perspective divide 这步是硬件做的
hsc里的数据是这样的
(x/rtan(a/2),y/tan(a/2),Az+B,z) 5.1
ndc这个空间里的数据是这样的
(x/rztan(a/2),y/ztan(a/2),A+B/z,1) 5.2
这两组数据都是4维的
我们先理解下5.2 看它前三项 这样的数据可以组成那个单位立方体
是个 标准的cube 并且符合透视原理 这个proj matix 第一项[0][0]里的/r它就是转到ndc的线性部分的数据
其它是透视投影的数据 这个数据就是个height/weight的ratio 让后续变换不受view frustrum长宽比影响
第二部分数据就是/z 和proj一样 是非线性部分 做完之后/w来解决的
这个数据 如果不看z项 只看xy项 那它就是 proj到二维的
如果看xyz三项 就是unit cube (至于cvv 你看他名字 canonical 我倾向认为它是homo cs里的概念是个四维下的unit cube)
所以对5.1来说我们可以理解成 就像一个点加w 变成齐次空间下的点一样
把5.2加了w得到的就是齐次空间下的unit cube 就是cvv
clip就是在这里做的 clip是在hcs做的 不在ndc做
至于你们以为的ndc下才有那个cube 那是在三维生物的眼里 hcs里也有这个cube只是还没转成能被三维生物认出来的形式
ndc是四维 但是它前三维也能组成三维数据 前两维也有proj数据 但它有z
所以到了 screen mapping 处理clip之后的 三维数据
screen coordinate有xy window coordinate 有xyz
就是在这个空间 dx和opengl是反着的 所以每次porting的时候 都有一个宏来处理这件事 后来有专门的api可以设置
图形程序应该能手推projmatrix 这样才好理解上面的事情 我也是拖了很近才推的
homogeneous clip space and NDC的更多相关文章
- 【翻译】View Frustum Culling --3 Clip Space Approach – Extracting the Planes
3.使用裁剪空间的方法提取平面 上一篇中,我们讨论了通过几何的方法提取视锥体的六个片面.在这一篇中,我们继续讨论通过裁剪空间的方法来提取视锥体的平面. 假设现在在世界坐标系中有一点p=(x,yz,1) ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION) 学习目标 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图 本章介绍一种在游戏和应用中,模拟动态阴影的基本阴影 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十八章:立方体贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十八章:立方体贴图 代码工程地址: https://github.c ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切 代码工程地址: https://git ...
- A trip through the Graphics Pipeline 2011_05
After the last post about texture samplers, we’re now back in the 3D frontend. We’re done with verte ...
- Direct3D11学习:(八)Effects介绍
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Effects框架是一组用于管理着色器程序和渲染状态的工具代码.例如,你可能会使用不同的effect绘制水.云. ...
- 【ZZ】 DShader之位移贴图(Displacement Mapping)
http://www.myexception.cn/other/1397638.html DShader之位移贴图(Displacement Mapping) www.MyException.Cn ...
- Introdution to 3D Game Programming With DirectX11 第11章 习题解答
11.1 这道题要注意使用了line strip,由于曾经一直用triangle list,所以在几何渲染的时候easy算错定点描绘的顺序. 贴一些代码,大概就能把这个问题解释清楚了,由于框架还不是特 ...
随机推荐
- CSS 显示或隐藏子元素
很多时候我们仅仅只是想让鼠标移动入某个元素,然后显示出某个元素. 大多数博客的标题或内容都是:使用CSS实现鼠标悬停在一行上,显示某些元素 很遗憾,这是错误的,鼠标悬停后,尽管CSS标准中有定义此种方 ...
- 深度学习---手写字体识别程序分析(python)
我想大部分程序员的第一个程序应该都是“hello world”,在深度学习领域,这个“hello world”程序就是手写字体识别程序. 这次我们详细的分析下手写字体识别程序,从而可以对深度学习建立一 ...
- C++运算符重载 模板友元 new delete ++ = +=
今天的重载是基于C++ 类模板的,如果需要非类模板的重载的朋友可以把类模板拿掉,同样可以参考,谢谢. 一.类模板中的友元重载 本人喜好类声明与类成员实现分开写的代码风格,如若您喜欢将类成员函数的实现写 ...
- 机器学习之路: python 支持向量机 LinearSVC 手写字体识别
使用python3 学习sklearn中支持向量机api的使用 可以来到我的git下载源代码:https://github.com/linyi0604/MachineLearning # 导入手写字体 ...
- cbv
- BZOJ.3489.A simple rmq problem(主席树 Heap)
题目链接 当时没用markdown写,可能看起来比较难受...可以复制到别的地方看比如DevC++. \(Description\) 给定一个长为n的序列,多次询问[l,r]中最大的只出现一次的数.强 ...
- UVALive 4867 Maximum Square 贪心
E - Maximum Square Time Limit:4500MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit ...
- [Visual Studio] .vsix项目模板制作
Visual Studio (VSIX,项目模板 )制作 下载Vsiual Studio 2012 SDK 下载地址:http://www.microsoft.com/en-us/download ...
- (转,学习记录)MD5加密算法中的加盐值(SALT)
我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就 ...
- ROS知识(7)----ROS命令中的单引号`和‘的混淆问题
ROS命令中的单引号`和‘的区别,比如使用`单引号,以下的命令是正确的: $ rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz 而使用‘单引号, ...