在图形管道中的哪个阶段进行剪辑?

zze*_*zef 4 c++ opengl graphics rendering clipping

我正在用 C++ 编写一个用于学习目的的软渲染器,但我已经遇到了一些障碍。我不知道我是否遗漏了什么,但我不确定何时执行剪辑。一些消息来源谈论它在应用透视投影矩阵之后但在透视分割之前(因此仍然在 3D 空间中)发生在剪辑空间中。其他来源谈到使用 Cohen-Sutherland 线裁剪算法等算法在 2D 空间(透视分割之后)执行它。如果我应该在 3D 空间中进行剪辑,那么深度缓冲区是否仅用于决定光栅化对象的顺序,还是必须在 2D 中进行剪辑,但还要防止 z 缓冲区中超出 -1 的点的光栅化?

基本上,关于这方面的信息不是很清楚,我实际上还没有看到如何在同构剪辑空间中实际剪辑。据说你应该这样做,但没有人展示如何。

Rab*_*d76 5

裁剪是在渲染管线顶点后处理阶段完成的。

透视分割之前,根据其顶点 ( )的均质裁剪空间位置,图元被裁剪到视图体积。剪辑规则是:gl_Position

-w <=  x, y, z  <= w.
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅OpenGL 4.6 API Core Profile Specification - 13.7 Primitive Clipping

  • 好吧,这只是 GL 规范所说的。真正的硬件将尝试通过使用保护带来尽可能避免削波,并且削波也可能与官方规格中的情况有很大不同。 (2认同)