使用自定义深度测试的深度打击解决方案
Depth-fighting solution using custom depth testing
我问题的核心是我在纯OpenGL中遇到深度战斗的麻烦。 我有两个相同的几何形状,但一个比另一个更简单。 这形成了一组完美的共面多边形,我想在更简单的几何图形之上显示复杂的几何图形。
不出所料,当我使用 OpenGL 深度缓冲区按顺序绘制两组三角形时,它会导致我进行深度斗争。目前,我已经使用glPolygonOffset
修补了它,但这个解决方案不适合我(我希望多边形完全是共面的)。
我的想法是在绘制第二组三角形时临时使用自定义深度测试。我想在渲染第一组时保存片段的深度。接下来,我将使用glDepthFunc(GL_ALWAYS)
禁用深度缓冲区(但仍在其中写入)。在渲染第二组时,我会丢弃 z 大于我刚刚创建的内存的片段,但有一定的余量(我猜至少是特定 z 处 Z 缓冲区精度的一次)。然后我会将深度函数重置为GL_LEQUAL
.
实际上,我只是想为深度测试强行留出一定的余量。
这是一种可能的方法吗? 问题是我不知道如何将信息(自定义深度缓冲区)从一个程序传递到另一个程序。
谢谢
PS :我还研究了帧缓冲区对象和延迟渲染,因为显然它允许通过"G缓冲区"传递信息,但是一旦我写:
unsigned int gBuffer;
glGenFramebuffers(1, &gBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
我的窗户变黑了...对不起,如果事情很明显,我还不熟悉OpenGL
正如 Rabbid76 所说,我可以简单地使用glDepthMask(GL_FALSE)
禁用深度写入。 现在,我可以使用相同的偏移量绘制多个共面多边形图层。 解决。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 使用自定义深度测试的深度打击解决方案