#point no.1
通过投影矩阵对点进行变换后,我们得到了 [-1,1] 范围内的点,
但是,在深度测试章节中,作者提到
F_depth = 1/z-1/far /(1/near - 1/far) 转换视图空间坐标,即 z=z eye从 [-1,1] 转换为 [0,1] 。
我已经关注了这个帖子,其中一位成员告诉我,该公式F_depth实际上是一系列已完成步骤的组合,并概述了此步骤:
z_Clip = C*z_eye+D*W_eye
w_Clip = -z_eye
where C=-(f+n)/(f-n), D=-2fn/(f-n).
Projective division:
z_ndc = z_clip/w_clip
Depth range:
depth = a + (a-b)*(z_ndc+1)/2
where glDepthRange(a,b) .
我尝试按照他的建议编写公式,但这与learnopenGLF_depth中给出的公式完全不同。
#point no. 2
另一个成员告诉我 [-1,1] 到 [0,1] 是窗口视口转换,它本身具有不同的公式。
所以,所有这些对我来说都没有任何意义(对于同样的事情,对于 openGL 有 3 个不同的公式和解释),我将针对这些相互矛盾的想法提出疑问:
- F_depth 是从视图空间到窗口空间的转换的组合吗?
- 深度范围变换和视口变换是一样的吗?为什么他们有不同的论坛(此链接
Point no.1中的一个和另一个 - F_depth公式是怎么得到的?或者,将世界空间点转换为 [0,1] 的变换组合是如何产生的
F_depth?