我正在用 C++ 编写一个用于学习目的的软渲染器,但我已经遇到了一些障碍。我不知道我是否遗漏了什么,但我不确定何时执行剪辑。一些消息来源谈论它在应用透视投影矩阵之后但在透视分割之前(因此仍然在 3D 空间中)发生在剪辑空间中。其他来源谈到使用 Cohen-Sutherland 线裁剪算法等算法在 2D 空间(透视分割之后)执行它。如果我应该在 3D 空间中进行剪辑,那么深度缓冲区是仅用于决定光栅化对象的顺序还是我必须在 2D 中进行剪辑,但还要防止 z 缓冲区中超出 -1 的点的光栅化?
基本上,关于这方面的信息不是很清楚,我实际上还没有看到如何在同构剪辑空间中实际剪辑。据说你应该这样做,但没有人展示如何。
最佳答案
剪辑是在 Vertex Post-Processing 中完成的在Rendering Pipeline的舞台.
根据 homogeneous 将基本体裁剪到 View 体积其顶点的裁剪空间位置( gl_Position
),在 perspective divide 之前.剪辑规则是:
-w <= x, y, z <= w.
有关详细信息,请参阅 OpenGL 4.6 API Core Profile Specification - 13.7 Primitive Clipping
关于c++ - 在图形管道中的哪个阶段进行剪辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60910464/