当前位置: 首页 > 知识库问答 >
问题:

OpenGL 中单独的帧缓冲区和深度缓冲区

凌恩
2023-03-14

在DirectX中,您可以有单独的渲染目标和深度缓冲区,因此可以绑定渲染目标和一个深度缓冲区、执行一些渲染、移除深度缓冲区然后使用旧的深度缓冲区作为纹理进行更多渲染。

你会如何在opengl中做到这一点?根据我的理解,您有一个帧缓冲区对象,其中包含颜色缓冲区和可选的深度缓冲区。我不认为我可以同时绑定多个帧缓冲器对象,我是否必须在每次更改时(可能一帧几次)重新创建帧缓冲器对象?普通的 opengl 程序是如何做到这一点的?

共有2个答案

颛孙博易
2023-03-14

您可以将多个渲染目标绑定到单个 FBO,这应该是诀窍。此外,由于 OpenGL 是一个状态机,因此您可以随时更改绑定和目标数量。

孟豪
2023-03-14

帧缓冲器对象只不过是对图像的一系列引用。这些可以是纹理(例如 2D 纹理的 mipmap 图层)或渲染缓冲区(不能用作纹理)中的图像。

没有什么可以阻止你组装一个使用纹理图像作为颜色缓冲区和深度缓冲区的FBO。也没有什么可以阻止你稍后(只要你不渲染到FBO,而这样做)从纹理采样作为深度纹理。FBO并不突然拥有这些图像或什么的。

很可能发生的情况是,您误解了FBO和OpenGL默认帧缓冲区之间的区别。默认帧缓冲区(即窗口)是不可更改的。你不能将它的深度缓冲区用作纹理或其他东西。使用FBO是你自己的事,但OpenGL不会让你以同样的方式使用默认帧缓冲区。

 类似资料:
  • 我有一个正在开发的OpenGL应用程序。正在渲染的地形似乎没有遵循深度缓冲规则,所以我猜我在某个地方搞砸了 我的代码中有GL11.glEnable(GL11.GL_CULL_FACE) 这是飞机在没有四边形在另一个后面的情况下的样子,所以即使没有z缓冲区,事情看起来也很正常。请注意,这是从“自上而下”的视图中,其中“相机”在飞机上方 而现在,从不同的角度看 离场景最远的四边形正在更靠近计算机的四边

  • 我在游戏中使用延迟渲染器。因此,第一个渲染过程是使用多个渲染rarget创建反照率和法线缓冲区,并填充深度缓冲区。所有这些缓冲区实际上都是纹理。 现在我想从其他渲染通道访问深度缓冲区,从而访问其他帧缓冲区,而不改变深度纹理。我只想读取深度值。对于这些通道,我主要绘制全屏四边形,我不希望他们更新深度纹理并将其消隐为深度值0。 如何将一个给定的深度纹理附加到另一个帧缓冲区,并确保它是只写的?

  • 我对openGL渲染很陌生,无论我做什么,深度深度都不起作用。我显然已经启用了深度测试(),并且我清除了每一帧的缓冲区。 但是 openGL 不断显示最后在其他人面前渲染的对象... 你可以在我的github上看到我的代码。这是两个相关的文件:主循环。我的主循环在,渲染在。 我正在使用java和lwjgl。

  • 我正在使用JOGL,但这个问题一般适用于OpenGL。似乎存在类似的问题,但它们要么针对GLSL代码,要么与复制帧缓冲区的内容有关,要么是一般建议-使用帧缓冲区对象,而不是。 我正在做一些阴影映射。如何使用帧缓冲对象将深度通道直接渲染到纹理? 能否请你贴一段初始化纹理和帧缓冲对象的代码,以及渲染场景前初始化一切的代码? 目前,我使用<code>glCopyTexSubImage2D<code>。我

  • 我做了一个在上面渲染天空盒和粒子的应用程序。我想添加一些效果,我需要使用帧缓冲区来渲染天空盒、粒子颜色、深度和位置以分离纹理。然后我想使用简单的着色器来使用这些纹理中的值并以适当的方式混合它们。我为纹理、帧缓冲区和屏幕四边形(渲染简单的矩形)编写了辅助类,但不幸的是——当我尝试使用它时没有任何渲染。 当绑定帧缓冲区被注释掉时,我的场景如下所示: 修改着色器表明深度和位置值计算正确。因此问题在于纹理

  • 我正在使用pyBullet,它是bullet3物理引擎的python包装器,我需要从虚拟相机创建点云。 这个引擎使用基本的OpenGL渲染器,我可以从OpenGL深度缓冲区中获得值 现在我有了具有深度值的Width*Height数组。我怎么能从中得到世界坐标?我试图保存。ply点云和点(width,height,depthBuffer(width,height)),但这并不能创建看起来像场景中对象