如何处理glsl中的深度

发布于 2024-12-09 17:14:29 字数 269 浏览 3 评论 0原文

我对 openGL 中的 FBO 和深度有疑问。我将投影、视图和模型矩阵传递给写入 g 缓冲区的着色器。当我解除 FBO 的绑定并写入 gl_FragColor 时,场景会按预期显示。但是当我写入 gl_FragData[0] 然后将附带的纹理写入屏幕对齐的四边形时,对象是根据处理的相反顺序而不是深度来绘制的......我可以通过先处理的对象看到后处理的对象。有人遇到过同样的问题吗?他们知道解决办法吗?或者有人可以提供从顶点着色器读取深度值、查询当前深度、然后根据比较写入深度缓冲区的语法,即在片段着色器中手动处理操作。

I have a problem with FBO and depth in openGL. I am passing projection, view and model matrices to a shader that writes to the g buffer. When I unbind the FBO and write to gl_FragColor the scene displays as it ought. But when I write to gl_FragData[0] then write the accompanying texture to a screen aligned quad, objects are drawn according to inverse order processed rather than depth... I can see through objects processed first to objects processed after. Has anyone had the same problem and do they know a fix? Or could someone provide syntax on reading depth values from the vertex shader, querying the current depth, then writing to the depth buffer depending on a comparison, ie, handling the operation manually in the fragment shader.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

春风十里 2024-12-16 17:14:29

您的主帧缓冲区很可能具有深度,而您手动创建的 FBO 可能没有。因此,当绘制到屏幕上时,您拥有深度排序的几何图形,而您的 FBO 无法提供该几何图形,并且在内部使用禁用的深度测试,没有与之关联的存储。

Your main frame-buffer most likely has the depth, while your manually created FBO might not have it. Therefore, when drawing to the screen you have depth-sorted geometry, while your FBO can not provide that and internally works with disabled depth testing having no storage associated with it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文