Perspective Devision

简介:

本文以OpenGL为例:

OpenGL的Projection矩阵为:

[

n/r, 0, 0, 0,

0, n/t, 0, 0,

0, 0, -(f+n)/(f-n), -2fn/(f-n),

0, 0, -1, 0

]

其中f为far,n为near。着重看z和w分量,xy就不解释了。

设z为view 变换后,camera space的深度值。那么乘以projection矩阵以后,

z' = -(f+n)/(f-n) * z - 2fn/(f-n)

w' = -z

这个时候,z‘的值并不在[-1,1]的范围内(x,y也不在这个范围)。因此,clip space的值域并非为[-1,-1]的一个cube。但是距离这个已经很接近了。 Perspective devision的意思是,clip space的x‘y'z'w‘同时除以w’,此时得到的x'',y'',z''才在[-1,1]的范围内。

这时:

z'' = (f+n)/(f-n) + 2fn/z*(f-n)

w'' = 1

此时的坐标称为NDC(Normalized Device Coordinates)。

所以,我们在VS中把坐标乘以MVP以后得到的值,是位于clip space中,而不是NDC,因此此时的w分量还是有意义的,并不能略去。glPosition也是一个vec4的类型,而不是vec3。clip space转换到NDC的这个perspective devision过程是由硬件做的,在裁剪之前完成。

顺便解释一下如何将depth texture中的z值转换成线性的z值。

首先,depth texture中的z值,值域为[0,1],是NDC,而不是在clip space中。

通常Linear01Depth = 1.0 / (_ZBufferParams.x * z + _ZBufferParams.y);

其中:

_ZBufferParams.x = (1.0 - far/ near) / 2.0;
_ZBufferParams.y = (1.0 + far/ near) / 2.0;

将带入上述公式:

Linear01Depth = z/f, 即为[0,1]范围内的线性深度。上述算法和Unity中的Linear01Depth函数是一致的。

相关文章
|
算法 数据可视化 C++
OpenCASCADE Outline
OpenCASCADE Outline eryar@163.com      有网友反映blog中关于OpenCASCADE的文章比较杂乱,不太好找,最好能提供一个大纲,这样方便查找。于是决定将这些学习时写的文章整理下,方便对OpenCASCADE的学习理解。
3076 0
|
资源调度 芯片
流片Corner Wafer介绍
本文介绍 流片Corner Wafer介绍
2339 0
流片Corner Wafer介绍
|
Web App开发
CSS3D之 perspective、perspective-origin属性
perspective、perspective-origin属性含义及常见用法介绍
1553 0
|
算法
Relative Orientation 与fundamental essential matrix
   由于《Hartley, Zisserman ...》书太厚,啃不动。所以最近回头看youtube上的德国鬼子视频, 补习机器视觉最基础的知识。所以本次博文,没有算法,没有代码,纯粹的定义和识记。
1645 0
|
C++ 算法
OpenCASCADE BRep Projection
OpenCASCADE BRep Projection eryar@163.com 一网友发邮件问我下图所示的效果如何在OpenCASCADE中实现,我的想法是先构造出螺旋线,再将螺旋线投影到面上。
1766 0
|
图形学
OpenCASCADE Coordinate Transforms
OpenCASCADE Coordinate Transforms eryar@163.com Abstract. The purpose of the OpenGL graphics processing pipeline is to convert 3D descriptions of objects into a 2D image that can be displayed.
1529 0
|
算法 数据可视化 Shell
OpenCASCADE Linear Extrusion Surface
OpenCASCADE Linear Extrusion Surface eryar@163.com Abstract. OpenCASCADE linear extrusion surface is a generalized cylinder.
1319 0
|
存储 算法 BI
OpenCASCADE Conic to BSpline Curves-Circle
OpenCASCADE Conic to BSpline Curves-Circle eryar@163.com Abstract. The conic sections and circles play a fundamental role in CAD/CAM applications.
1486 0
|
算法
OpenCASCADE Conic to BSpline Curves-Hyperbola
OpenCASCADE Conic to BSpline Curves-Hyperbola eryar@163.com Abstract. Rational Bezier Curve can represent conic curves such as circle, ellipse, hyperbola, .
1138 0

热门文章

最新文章