4D均匀空间中的削波问题?

时间:2016-05-30 04:05:03

标签: clipping rasterizing homogenous-transformation

我正在通过实现一个小巧的软件渲染器来学习可编程渲染管道。我试着以'硬件'的方式实现它。但是,我不熟悉GPU管道,并且遇到了一些均匀剪切问题。

根据this thread,我们假设我们在3D眼坐标中有两个点e0e1,它们被投射到4D中的h0(-70, -70, 118, 120)h1(-32, -99, -13, -11)均匀的剪裁空间。然后我们在4D齐次空间中进行插值,段h0-h1被4D点w = -x处的z = -1平面h(t)=t*h1+(1-t)*h2t = 0.99)剪切,h0-h(0.99)。在不失一般性的情况下,假设我们有h(0.99)部分(可见)可以进入光栅化阶段。所以我们需要生成t的相应顶点属性(与顶点着色器的输出格式相同)。我的问题是如何生成这些新顶点的属性?

更新:我尝试使用t作为插值变量来获取h(t)的顶点属性,并得到合理的结果。我想知道为什么来自4D空间的print_r($_FILES)可以在3D顶点属性中获得良好的插值结果?

1 个答案:

答案 0 :(得分:1)

  

我想知道为什么4D空间的t可以在3D顶点属性中获得良好的插值效果?

因为那是数学如何运作的。或者更重要的是,线性数学如何运作。

在没有深入研究数学的情况下,linear transformation是两个空间之间的转换,它保留了原始空间的线性特性。例如,在线性变换之后,彼此平行的两条线将保持平行。如果在Y方向上执行2倍刻度,则新线将越来越远离原点。但它们仍然是平行的。

假设我们有一条AB线,你定义了C点,它是A和B之间的中点。如果你在A,B和C上执行相同的线性变换,新点C < sub> 1 将位于A 1 B 1 的行上。不仅如此,C 1 仍然是新行的中点

我们甚至可以概括这一点。对于任何C = (B-A)t + A,C可以是符合以下等式的任何点t。 A,B和C的线性变换不会影响此等式中的变化 t

事实上,这就是线性变换的真正含义:它是在原始空间中所有点A,B和C中保留t在该等式中的变换。

您空间中有4个维度的事实最终与上面的向量方程无关。任何空间中的线性变换都将保留t。矩阵变换表示从一个空间到另一个空间的线性变换(通常)。

此外,您的原始3D位置实际上是4D位置,W假定为1.0。

请注意,从剪辑空间(4D齐次)到normalized-device-coordinate space(3D非齐次)的转换是非线性。 W分割不是线性变换。这就是为什么你在4D均匀剪辑空间中剪切的一个原因,我们仍然保留原始位置和剪辑空间之间的线性关系。

这也是perspective-correct interpolation of per-vertex outputs重要的原因:因为您在(窗口空间)中进行光栅化的空间是而不是原始空间输出的线性变换顶点着色器(剪辑空间)。这意味着t未正确保留。插值时,通常需要对其进行补偿,以保持每个顶点值的线性关系。