问题标签 [render-to-texture]

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 回答
567 浏览

c++ - OpenGL 包装器中的 Alpha/纹理问题

我正在为一些 OpenGL 函数编写一个包装器。目标是包装游戏 Neverwinter Nights 使用的上下文,以便应用后处理着色器效果。在学习了 OpenGL(这是我第一次尝试使用它)并玩了很多 DLL 和重定向之后,我有了一个可以工作的系统。

但是,当后处理全屏四边形处于活动状态时,游戏绘制的所有纹理和透明度都会丢失。这应该是不可能的,因为我所有的功能都是在游戏完全完成自己的渲染之后才生效的。

该代码不使用渲染缓冲区或帧缓冲区(两者都拒绝以任何方式在我的系统上编译,无论是否使用 GLEW 或 GLee,尽管其他程序支持和使用)。最终,我将这段代码放在一起处理从缓冲区复制纹理并渲染全屏四边形:

这段代码的功能几乎完美无缺,并且没有明显的减速。但是,当它处于活动状态时(我添加了 frameCount 条件以每隔约 5 秒打开和关闭它),游戏渲染器会完全忽略所有 alpha 和纹理。在这个函数之前我没有关闭任何类型的混合或纹理(唯一的 OpenGL 调用是创建 nwshader->thisframe 纹理)。我能够捕捉到一些正在发生的事情的屏幕截图:

破碎的 A:http: //i4.photobucket.com/albums/y145/peachykeen000/outside_brokenA.png
破碎的 B:http: //i4.photobucket.com/albums/y145/peachykeen000/outside_brokenB.png
(注意,在 B 中,后面的烟雾没有损坏,它是正确透明的。HUD 也是如此。)
损坏的内部:http: //i4.photobucket.com/albums/y145/peachykeen000/transparency_broken.png
正确的内部(用于比较):http ://i4.photobucket.com/albums/y145/peachykeen000/transparency_proper.png

四边形的绘制也打破了菜单,将整个东西变成了一个黑色的表面,带有一个白色的盒子。我怀疑这是深度或游戏如何绘制某些对象的问题,或者是未正确重置的状态。我已经使用 GLintercept 转储了一帧中所有调用的完整日志,并且没有发现任何错误(对 wglSwapLayerBuffers 的调用始终是最后一个)。

作为使用 OpenGL 的新手,我真的不知道出了什么问题(或如何修复它),而且我尝试过的没有任何帮助。我错过了什么?

0 投票
2 回答
4757 浏览

java - 在 Android 和 OpenGL ES 中将字符串渲染为纹理

我到处搜索,但找不到太多将字符串渲染到纹理然后在屏幕上的四边形上显示该纹理的内容。有人可以提供该过程的概要或提供描述如何的良好资源吗?将字符串渲染到纹理甚至是在 Android OpenGL ES 应用程序中显示文本的最佳方法吗?

编辑:好的,因此 LabelMaker 干扰了 alpha 混合,纹理(从具有透明背景的 PNG 创建)现在具有纯黑色背景,而不是透明背景。如果我注释掉所有与 LabelMaker 相关的代码,它就可以正常工作。

更新:没关系。我查看了代码,发现 LabelMaker 在绘制标签后禁用了混合。

0 投票
2 回答
5576 浏览

opengl - JOGL 和帧缓冲区渲染到纹理的问题:无效帧缓冲区操作错误

好的,所以我试图将一个场景渲染为一个小的 32x32 纹理并遇到了问题。当我尝试向纹理实际绘制任何内容时,出现“无效帧缓冲区操作”错误。我已经简化了下面的代码,它只是尝试将一个四边形渲染到一个纹理,然后将该四边形绑定为另一个渲染到屏幕上的四边形的纹理。所以我的问题是......错误在哪里?这是使用 JOGL 1.1.1。错误发生在代码中的 Checkpoint2 处。

0 投票
1 回答
2761 浏览

iphone - 渲染到纹理或屏幕外帧缓冲区

OpenGLES在 iPhone 上渲染到纹理和屏幕外帧缓冲区时遇到问题。

替代文字
(来源:imagehost.org(来源:imagehost.org
替代文字

第一张图片显示了直接渲染的麻将牌CAEAGLLayer,这是正确的。第二个显示渲染到屏幕外帧缓冲区的图块,使用复制到纹理glCopyTexImage2D并将纹理渲染到CAEAGLLayer. 两者都使用白色不透明四边形作为背景。我也尝试过直接渲染到纹理,但效果与屏幕外帧缓冲区相同。

我创建帧缓冲区的代码:

我从纹理图集中绘制所有图块,只需调用一次glDrawElements使用 VBO 来传递交错的顶点数据(坐标、纹理坐标、颜色)。我使用RGBA8888纹理格式,将每个图像绘制在具有glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)混合功能的两个三角形(四边形)上。我不使用深度缓冲区(在所有情况下)。

有人可以告诉我可能是什么问题吗?

0 投票
0 回答
2922 浏览

opengl - GLSL着色器渲染到纹理不保存alpha值

更新:Danvil 在下面的评论中解决了这个问题。我的纹理格式是 GL_RGB 而不是 GL_RGBA 这当然意味着不保留 alpha 值。不知道为什么我没有意识到……谢谢丹维尔。

我正在使用 GLSL 着色器渲染到纹理,然后将该纹理作为输入发送到第二个着色器。对于第一个纹理,我使用 RGB 通道将颜色数据发送到第二个 GLSL 着色器,但我想使用 alpha 通道发送一个浮点数,第二个着色器将用作其程序的一部分。问题是当我在第二个着色器中读取纹理时,alpha 值始终为 1.0。我通过以下方式对此进行了测试:

在第一个着色器结束时,我这样做了:

然后在第二个纹理中,我使用沿线的东西读取第一个纹理的值

我的输出中没有像素是黑色的,而如果我将上面的代码更改为读取

在第二个着色器中

所有适当的像素都是黑色的。这意味着由于某种原因,当我在第一个着色器中将 alpha 值设置为 1.0 以外的值并渲染到纹理时,第二个着色器仍将其视为 1.0。

在渲染到纹理之前,我 glDisable(GL_BLEND);

对我来说似乎很清楚,问题与 OpenGL 以某种对我来说并不明显的方式处理 alpha 值有关,因为我可以按照我想要的方式使用蓝色通道,并且发现那里的人会立即看到问题.

此外,我调用着色器程序的方式是绘制一个四边形(我正在渲染到具有纹理的帧缓冲区):

0 投票
1 回答
2249 浏览

iphone - 将哪个参数传递给 glGet 以获取 OpenGLES iPhone 中的当前帧缓冲区

我知道使用 glGet 来获取各种参数。我需要知道如何获取当前的 GL_FRAMEBUFFER_OES 并获取 GLuint 类型的帧缓冲区 ID。

我需要使用 renderToTexture。当切换回普通帧缓冲区时,这将使其中一个类的代码更容易。

0 投票
3 回答
3527 浏览

iphone - glFramebufferTexture2D 性能

我正在使用 GPU 进行大量计算,其中涉及大量渲染到纹理的操作。这是一个迭代计算,所以有很多渲染到纹理,然后将该纹理渲染到另一个纹理,然后将第二个纹理渲染回第一个纹理等等,每次都将纹理传递给着色器。

我的问题是:为我想要渲染的每个纹理都有一个单独的 FBO 更好,还是我应该有一个 FBO 并在glFramebufferTexture2D每次我想更改渲染目标时使用绑定目标纹理?

我的平台是 iPhone 上的 OpenGL ES 2.0。

0 投票
2 回答
3248 浏览

direct3d - 使用 Direct3D 进行高级文本渲染

让我描述一下我的任务的“战场”:

  • 超过100万用户的多房间音视频聊天;
  • 自定义 Direct3D 渲染器;

我需要实现的是 TextOverVideo 功能。文本本身通过网络传输,并将使用 Direct3D 渲染器在接收方进行渲染。AFAIK,它通常用于游戏开发中,用字母/数字创建自己的纹理并绘制这些项目。因为我们的应用程序必须支持多种语言,所以我们应该使用一个标准。这就是为什么我一直在使用 ID3DXFont 界面,但我发现了一些不满意的限制。

我面临的是缺乏可扩展性。例如,如果用户正在调整视频窗口的大小,我必须在他这样做时使用新的 D3DXFONT_DESC 重新创建 D3DXFont。我认为这是不可接受的。这就是为什么我看到的唯一解决方案(由于我的技能)是以某种方式将文本渲染为纹理,因此通过缩放、平移等绘制精灵。

所以,我不确定我是否朝着正确的方向前进。请提供建议、经验、文献、资源...

0 投票
1 回答
1240 浏览

c++ - GPU 上的图像处理 - 过滤器的连续着色器 - FBO

我目前正在尝试在 OpenGL 图像处理算法中实现。

我想连续使用几个着色器来执行几个过滤器(Sobel Gaussian,...)。我知道要做到这一点,我必须通过 FBO 渲染纹理。我读了很多关于这个的东西,并写了一个代码。但我没有得到我预期的结果。

目前,我只是尝试使用两个着色器。所以,我有一个原始图像,它是我的第一个着色器的输入。然后,我想将着色器的输出渲染为纹理,然后将其作为第二个着色器的输入(乒乓技术)。最后,我想显示第二个着色器的输出。

但结果,我得到了原始图像。

我的代码如下:

有人知道出了什么问题吗???

0 投票
2 回答
449 浏览

optimization - 是否可以使用 Xna 一次将场景渲染到多个纹理?

我想知道是否可以一次将一个场景渲染到多个渲染目标(或者比通过客户端代码多次绘制它更快)。我想优化一些代码,这些代码被渲染为几个不同尺寸的纹理(例如,512 x 512、256 x 256、128 x 128 和 64 x 64)。

我意识到我可以使用从原始目标派生的 mip 贴图,但我不想混合颜色。我怀疑 mip 映射将从几个纹素中取平均值,但出于我的目的,我只想要未经修饰的渲染,就像显卡渲染的那样。如果 mipmap 有任何设置允许这样做,那么它作为一个可行的解决方案也是相当可观的。

顺便说一句,有人知道mipmaps是在CPU还是GPU上生成的?

谢谢阅读。