问题标签 [fbo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
997 浏览

opengl - OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?

首先,我在 WPF 应用程序中使用 OpenTK,但我认为这更像是一个通用的 OpenGL 的东西。

在我的应用程序中,我希望能够将 3D 内容渲染为纹理。我不需要输出到屏幕上的窗口或控件 - 我只想渲染到背景纹理。

那么,我应该如何设置 OpenGL 来做到这一点?通常,应使用 devicecontext 作为参数创建图形上下文。但在我的情况下,我不想输出到设备上下文,我想渲染到一个固定大小的 FrameBufferObject,其设置(fe 1024x1024、32bpp、32bits ZBuffer)与窗口或显示无关。

我希望有人对这样的设置有任何经验:)

0 投票
1 回答
1419 浏览

multithreading - OpenGL / OpenTK:在 OpenGL 控件中显示在后台线程上渲染的 FBO

我通过 OpenTK 使用 OpenGL,并在后台线程中渲染到 FramebufferObject。现在,在每个渲染帧之后,我想在我的 UI 中的一个或多个 OpenGL 控件中显示(部分)FBO。

这是如何运作的 ?

0 投票
1 回答
2827 浏览

opengl - 是否可以将默认渲染缓冲区附加到 FBO?

我正在考虑重构我的大部分渲染代码,并且突然想到一个问题:是否可以使用帧缓冲区对象中的多个颜色附件渲染到屏幕和纹理?即使它有许多有用的应用程序,我也找不到任何信息是否应该可行。我想将我的纹理绑定为颜色附件 0 和渲染缓冲区 0 到附件 1 就足够了?

例如,我想制作一个交互式应用程序,您可以在其中“绘制”3D 模型。我通过将 UV 坐标渲染到纹理来解决用户绘制的位置,这样我就可以查看鼠标坐标来修改纹理的位置。在我的情况下,最好有一个着色器,它可以一次性将 UV 绘制到纹理上,并将实际纹理绘制到屏幕上。

有没有更好的方法来做到这一点,还是我走在正确的轨道上?

0 投票
3 回答
1588 浏览

c++ - 使用帧缓冲区缩放纹理

我的目标是能够在加载纹理时缩放纹理,因此我不必在精灵渲染的每一帧上都这样做。我认为最好的方法是将缩放的纹理渲染到另一个纹理上,基本上是缓存它。但是,使用以下代码,我只得到红色四边形(由于 glClearColor)所以我知道 FBO 正在工作,而不是我渲染新纹理的方法

0 投票
1 回答
254 浏览

c++ - FBO 用于分离纹理

如何设置 FBO 以便在一个渲染过程中在两个单独的纹理中渲染深度和颜色缓冲区?

0 投票
1 回答
1093 浏览

opengl - OpenGL(FBO)中的普通后台缓冲区+渲染到深度纹理

情况如下:我有一个包含一些深度值的纹理。我想使用该纹理作为深度缓冲区来渲染一些几何图形,但我希望将颜色写入普通帧缓冲区(即窗口的帧缓冲区)。

我该怎么做呢?我尝试创建一个 FBO 并仅将深度纹理绑定到它(GL_DEPTH_COMPONENT),但这不起作用;没有任何颜色出现。

0 投票
1 回答
2071 浏览

opengl - 通过 FBO 使用 Render to Target 时是否需要重新生成 MipMap?

假设 mipmapping 是可取的:

我打电话给 glGenerateMipmapEXT(GL_TEXTURE_2D); 当我第一次为我的 FBO 分配渲染目标时。当我完成渲染后是否必须再次调用它以正确填充所有 mipmapping 级别,或者后续渲染调用是否同时渲染到所有级别?

我有一个示例,当最小过滤器(GL_LINEAR_MIPMAP_LINEAR)启动时,我的一个对象正在淡入 <0,0,0,0>,并且我假设在渲染后未重新进行 mipmapping 会导致此问题。

我浏览了一些示例,发现有几个在其中进行了后续 glGenerateMipmap 调用,但更多的是没有调用的地方。

意见?

0 投票
1 回答
298 浏览

iphone - 将 2 个纹理绑定到一个或两个 FBO 是否更快?

我想一个接一个地运行几个着色器(主要是图像处理),一个的输出是以下的输入。我想知道仅使用一个绑定到所有需要的纹理的 FBO 是否会提高性能,或者为每个纹理创建一个 FBO 是否相同?

如果重要的话,目标平台是 iPhone,因此使用 OpenGL ES 2.0。

谢谢

0 投票
1 回答
1619 浏览

buffer - 在 Borland C++ Builder 6 中使用帧缓冲对象 (FBO)

我在帧缓冲区对象 (FBO) 的命令 glGenFramebuffersEXT 上有一个“访问冲突”:

建立了一个关于 FBO 的帮助线程,我检查了 glext.h 初始化是否正常,并以这种方式在预处理器行中重复:

=> 访问冲突仍然存在。

另一个帮助线程促使我下载 NVIDIA OpenGL SDK,因为我有一张 GT9800 Nvidia 卡:它没有删除“访问冲突”。

我尝试在 Borland Builder 6 中使用 Glee 和 Glew:

  • 要在 Borland 中包含 Glew,首先需要将 Visual Studio "coff" lib 从 coff 转换为 borland builder "omf" lib,

  • 但是使用 borland 命令脚本“coff2omf.exe”我得到这个错误标签:“无效的机器类型” - 使用“objconv.exe”我得到这个错误:“导入库无法转换为静态库”。

=> 有人知道我如何成功地将 Glew "coff" lib 转换为 Borland Builder 格式 "omf" 吗?

=> 我们如何将“导入库”转换为“静态库”?

0 投票
1 回答
6243 浏览

c++ - openGL / GLSL:bloom/blur,渲染到 FBO

我又陷入了另一个僵局,我似乎无法靠自己解决。我真的希望有人可以帮助我。

我一直在尝试使用 GLSL 创建一个漂亮的小绽放效果,效果很好。当我尝试将一些移动到我的场景中时,我注意到在渲染到它们之前我忘记清除我的 FBO。

如果不清除它,它永远不会改变场景,因为我总是使用相同的纹理。使用 glClear(); 命令它仍然有效,但仅对于第一帧,我得到的只是黑屏。所以我想我的问题是我无法让我的 FBO 每一帧都持续更新。

我觉得我要么错过了一些非常明显的东西,要么做了一些非常错误的事情。

如果您有任何建议,我将不胜感激。

这是我在第一帧中得到的: 在此处输入图像描述

资料来源:( 使用openFrameworks)

设置:

画:

FBO:

更新:

glClearColor 的 alpha 值至少似乎是我的问题的一部分。

我试着弄乱它,我得到的是:(如你所料,使用向上和向下缩放的四边形)

在此处输入图像描述

不知何故,我似乎在路上的某个地方失去了所有的色彩。奇怪的是,我的 4 个 FBO 和其中一个的 (0, 0, 0, 1) 得到了最好的结果。为所有 FBO 设置 (0, 0, 0, 0) 只会产生灰色图片(我假设这是默认窗口,其中没有任何内容)。

这是我的“混合着色器”:

有什么猜测吗?