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

标签 c++ opengl graphics rendering clipping

我正在用 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/

相关文章:

c++ - 标记为过时

c++ - 如何在一台 PC 上的不同 OpenGL 版本上测试我的 OpenGL 代码?

algorithm - 光子映射 - 几个问题

移动时 OpenGL 顶点抖动 - 2D 场景

c++ - 无法在 openGL 中渲染天空盒

java - 使用两个相机进行立体校准和物体的 3D 重建?

python - 如何正确使用 gluLookAt?

c++ - 双指针内存分配

c++ - uint32_t 没有命名类型

c++ - 使用 LD_PRELOAD 重定向 system() 函数调用