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 这样才好理解上面的事情 我也是拖了很近才推的 

原文地址:https://www.cnblogs.com/minggoddess/p/10582663.html

时间: 2024-08-08 00:23:25

homogeneous clip space and NDC的相关文章

【翻译】View Frustum Culling --3 Clip Space Approach – Extracting the Planes

3.使用裁剪空间的方法提取平面 上一篇中,我们讨论了通过几何的方法提取视锥体的六个片面.在这一篇中,我们继续讨论通过裁剪空间的方法来提取视锥体的平面. 假设现在在世界坐标系中有一点p=(x,yz,1),modelview矩阵记作M,projection矩阵记作P.当点p经过这两个矩阵变换后变到pc=(xc,yc,zc,wc)的位置,即 因为pc点是由齐次坐标表示的,则其正则化后为pcn: 在正则化的裁剪空间中,视锥体的中心与单位立方体的原点对齐,且它的六个平面由以下平面界定: Left Plan

GPU渲染管线与可编程着色器

本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/71978861 这篇文章是解析计算机图形学界"九阴真经总纲"一般存在的<Real-Time Rendering 3rd>系列文章的第三篇.将带来RTR3第三章内容"Chapter 3 The Graphics Processing Unit 图形处理器"的总结.概括与提炼. 这章的主要内容是介绍G

Directx11学习笔记【十二】 画一个旋转的彩色立方体

上一次我们学习了如何画一个2D三角形,现在让我们进一步学习如何画一个旋转的彩色立方体吧. 具体流程同画三角形类似,因此不再给出完整代码了,不同的部分会再说明. 由于我们要画彩色的立方体,所以顶点结构体中加入颜色变量 struct Vertex { XMFLOAT3 pos; XMFLOAT4 color; }; 着色器代码 1 cbuffer cbPerObject 2 { 3 float4x4 gWorldViewProj; 4 }; 5 6 struct VertexIn 7 { 8 flo

opengl 教程(23) shadow mapping (2)

原帖地址:http://ogldev.atspace.co.uk/www/tutorial24/tutorial24.html Background In the previous tutorial we learned the basic principle behind the shadow mapping technique and saw how to render the depth into a texture and later display it on the screen b

[工作积累] UE4 TAA ReProjection的精度处理

先贴一个UE4 TAA的slidehttps://de45xmedrsdbp.cloudfront.net/Resources/files/TemporalAA_small-59732822.pdf 里面细节问题很多,先记录一下目前想到和遇到的问题,便于备忘,后面有空的话再记录. TAA用到的Velocity和抖动对精度要求比较高, 特别是大场景下误差容易比较大,UE4做了一系列的处理来保持精度. 投影矩阵的精度 1 static const FMatrix InvertProjectionMa

A Quick Overview of MSAA

A Quick Overview of MSAA 原文地址:https://mynameismjp.wordpress.com/2012/10/24/msaa-overview/ Previous article in the series: Applying Sampling Theory to Real-Time Graphics MSAA can be a bit complicated, due to the fact that it affects nearly the entire

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 vertex shading, so now we can start actually rendering stuff, right? Well, not quite. You see, there’s a bunch still left to do before we actually start ra

Directx10 龙书笔记- 雾效的实现

雾 : 说白了就是一层有颜色的(一般是白色,灰色) 蒙蒙的感觉 混在光线里面. 不管是白天还是黑天. 龙书里面是这样实现的: 1.  给雾定义一个颜色 float3 gFogColor={0.7f,0.7f,0.7f}; 2. 然后呢在顶点着色器里面计算出 顶点级别的雾化需要的颜色加成比例 加成比例: 意思是当距离摄像机,就是你的眼睛越远,雾的浓度越大,就是颜色越深. 根据这个得出一个(0,1)的和距离有关的比例系数 vout.fogLerp = saturate((d-gFogStart)/g

DirectX Box

通过该Demo,可以清楚了解DirectX流程.将完整程序贴出,自己加以注释,方面查看理解. 1 /* 2 2015.4 3 d3dUtil.h 4 5 d3d 常用工具代码 6 */ 7 8 #ifndef D3DUTIL_H 9 #define D3DUTIL_H 10 11 // Let VC++ know we are compiling for WinXP and up. This let's us use 12 // API functions specific to WinXP (