在4D同构空间中进行裁剪时,GPU实际做什么的详细信息?


10

我正在通过实现一个微型软件渲染器来学习可编程渲染管道。我尝试以“硬件”样式实现它。但是,我对GPU管道不熟悉,并遇到了一些均质裁剪的问题。

均匀剪裁空间包含一个w变量,该变量在每个顶点处都不同。每个顶点对象在其自己的裁剪空间中是否是同质坐标(在投影矩阵和均质除以w之间)?如果是这样,如何截断比平截头体更近或什至在相机后方延伸的线和三角形(即w <= frustum_znear)?

更新该线程说,齐次空间中的裁剪直接是4D齐次空间中的交集问题。表示交点为p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4。假设我在4D同构空间中有P0(-70, -70, 118, 120)P1(-32, -99, -13, -11),且与交点plane w = -z(在NDC中为z = -1)为(-35, -96, -1, 0.9) t = 0.99,如何在NDC空间中获得相应的顶点对象?

一旦获得正确的交点,是否应该在顶点着色器产生的顶点对象之间进行插值以获取新的顶点对象?


这让我感到震惊,因为单个帖子有太多问题,应该将其拆分。一般规则是每个帖子一个问题(或至少是关键问题)。
皮卡列克

@Pikalek我删除了其他两个问题,并尝试使此线程合理。谢谢你的建议。
stanleyerror '16

Answers:


1

裁剪是在“ w”分割之前的3D空间中进行的,而不是在4D空间中进行的。

GPU可以找到视锥的近,远平面或全部6个3D平面,然后将Geo裁剪到该平面。

如果在坐标的符号之前进行了w分割,则它将在眼睛/相机后面翻转为顶点。

如果在w分割之前仅将近距离平面用于3D裁剪,则在x&y平面的光栅化阶段可能仅依赖2D裁剪。


W只是与Z直接相关的投影分频器,实际上不是第4维。4x4矩阵是“黑客”,以方便的格式包括平移和投影分割。它之所以起作用,仅是因为位置隐含为(x,y,z,1),法线隐含为(x,y,z,0)。

但这实际上不是4个独立的维度。

“ W”的其他任何不为1或0的值对于几何图形来说意义不大,这是用于关闭平移的便捷on / off开关。


0

如果您要将同构剪辑空间坐标转换为规范化设备坐标(NDC)坐标,则过程为: <x y z w> → <x/w y/w z/w>

关于为什么剪辑空间总是被称为“均匀剪辑空间”的 GDSE Q / A 可能对您也有帮助。


1
感谢您的回答。但是,我的问题是关于插值的。假设在3D眼睛坐标下的两个点e1,e2投影到4D均匀裁剪空间h1,h2。然后我们在4D齐次空间中进行插值,将段h1-h2裁剪为4D点h(t)= t * h1 +(1-t)* h2。在不失一般性的前提下,假设我们有h1-h(t)部分(可见)馈送到栅格化阶段。因此,我们需要生成相应的顶点属性(与顶点着色器的输出格式相同)。我的问题是如何生成这些新顶点的属性?
stanleyerror

我的理解是,内插不是在HCS中完成的,但我可能会误会。如果您在这里没有得到更多/更好的答案,则可以尝试重新询问/迁移到SO。
皮卡列克

好。我可以直接将此线程迁移到SO,还是需要在此处重新打开一个新问题。
stanleyerror '16

我建议你再问的错误;通常不鼓励交叉发布
皮卡列克

我认为管理员可以迁移。
锡达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.