问题标签 [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 回答
823 浏览

iphone - 通过第三个纹理插值两个纹理(因素是亮度,而不是 alpha)

如何通过动态纹理 C 有效地插入每个像素的两个纹理 A 和 B 并将它们绘制在一个简单的四边形上?接受多遍算法。

我在 CPU 上计算每帧 C 纹理并将其上传glTexImage2D到仅 alpha 纹理中取得了一定的成功。

虽然这行得通,但性能不足,我不得不将 C 的尺寸减小到全尺寸的一半,以绕过复制带宽瓶颈。

因此,出于性能原因,我尝试使用渲染到纹理进行所有 C 纹理更新。

我能够为渲染设置必要的缓冲区,但从根本上说,我得到了 RGB 或 RGBA 格式的纹理,其掩码以亮度/RGB 信息编码,而不是alpha

如何有效地将其转换为我需要插入纹理管道的 alpha 纹理?请记住,iPhone 上没有可编程管道(着色器)并且只有两个纹理单元可用。

更新: A 和 B 是纯 RGB 纹理,即没有 alpha。

0 投票
2 回答
32550 浏览

iphone - OpenGL ES 渲染到纹理

我一直无法找到直接的代码来将场景渲染到 OpenGL ES 中的纹理(如果重要的话,特别是对于 iPhone)。我有兴趣了解以下内容:

  1. 如何在 OpenGL ES 中将场景渲染为纹理?
  2. 您必须使用哪些参数来创建能够在 OpenGL ES 中作为渲染目标的纹理?
  3. 将此渲染纹理应用于其他图元是否有任何影响?
0 投票
1 回答
2904 浏览

opengl-es - 使用 alpha 渲染到纹理问题

当我渲染到纹理,然后绘制相同的图像时,它似乎使一切都变暗了。要获取此图像:

http://img24.imageshack.us/img24/8061/87993367.png

我将左上角的正方形与颜色(1, 1, 1, .8)渲染到纹理,然后渲染该纹理,加上中间的正方形(相同颜色)到另一个纹理,最后将该纹理加上右下角的正方形(相同颜色)渲染到屏幕。

如您所见,每次我渲染纹理时,一切都会变暗一些。

我的渲染到纹理代码如下所示:(我在 iPhone 上使用 OpenGL ES)

我在这里做错了什么吗?你需要更多的代码来弄清楚吗?这里可能发生了什么?

0 投票
3 回答
1714 浏览

opengl - 渲染到纹理时的图像混合问题

这与我的最后一个问题有关。要获取此图像:

http://img252.imageshack.us/img252/623/picture8z.png

  1. 我画了一个白色背景(颜色= (1, 1, 1, 1))。

  2. (1, 0, 0, .8)我使用 color =和 blend function对左上角的两个正方形进行渲染纹理(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),然后使用 color =(1, 1, 1, 1)和 blend function绘制纹理(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)

  3. (1, 0, 0, .8)我用 color =和 blend function绘制右下角的正方形(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

根据我的计算,渲染到纹理的方块应该有颜色

所以在白色背景上绘制纹理后,它们应该有颜色

右下角的方块应该有颜色

这应该看起来一样!我的推理错了吗?我的计算错了吗?

无论如何,我的目标是缓存我的一些场景。如何渲染到纹理,然后绘制该纹理,使其等同于仅内联绘制场景?

0 投票
1 回答
1139 浏览

c++ - 带有 FBO RTT 的 OpenGL,在不应该的时候进行混合

这应该很简单,但它消耗了我几个小时的时间,我不知道发生了什么。

我正在将纯色全屏四边形渲染为纹理,然后使用 glGetTexImage 读取结果。它与 GPGPU 相关,所以我希望 alpha 值表现得好像它是其他三个中的任何一个。我在GL_RGBA32F_ARB10.5 的 MacBook Pro 上使用 FBO、纹理格式、NVidia 卡,如果重要的话。

如果我指定的 alpha 为 1,我只会返回正确的颜色;使用任何其他值,它似乎与帧缓冲区中已有的内容混合,即使我已明确禁用GL_BLEND. 我也尝试启用混合和使用glBlendFunc(GL_ONE, GL_ZERO),但最终结果是相同的。我可以在渲染之前将帧缓冲区清除为零,从而修复它,但我想了解为什么这是必要的。作为第二个测试,当我只想要原始的 4 通道颜色时,渲染两个重叠的四边形会产生混合结果。当然,纯色四边形应该完全覆盖帧缓冲区中的像素?我猜我误解了一些基本的东西。谢谢。

0 投票
3 回答
1934 浏览

directx - 在像素着色器中设置纹理并使其成为渲染目标?

我想知道,如果我使用着色器渲染场景,我传入的纹理也恰好是该场景的渲染目标,它会导致任何不需要的行为吗?

所以基本上:

这究竟会导致什么?

如果我在渲染之前不清除渲染目标,纹理仍然可以正常工作吗?我只是假设在调用 device->End 之前,最终的更改不会写入纹理?

0 投票
1 回答
15942 浏览

iphone - OpenGL ES 渲染到纹理,然后绘制纹理

我正在尝试渲染到纹理,然后使用 iPhone 上的 OpenGL ES 将该纹理绘制到屏幕上。我以这个问题为起点,在 Apple 的演示 EAGLView 的子类中进行绘图。

实例变量:

要初始化帧缓冲区和纹理,我这样做:

现在,如果我像往常一样简单地将场景绘制到屏幕上,它可以正常工作:

但是,如果我渲染到“textureFrameBuffer”,然后在屏幕上绘制“纹理”,则生成的图像是颠倒的并且“由内而外”。也就是说,看起来好像 3d 对象的法线指向内部而不是外部——每个对象的最前面是透明的,我可以看到背面的内部。这是代码:

通过相应地重新排序 (glTexCoordPointer) 坐标(在 Texture2D 的 drawInRect 方法中),我可以轻松地将图像正面向上翻转,但这并不能解决“由内而外”的问题。

我尝试用手动创建的 OpenGL 纹理替换 Texture2D 纹理,结果是一样的。绘制从 PNG 图像加载的 Texture2D 工作正常。

至于绘制对象,每个顶点都有一个指定的单位法线,并被GL_NORMALIZE启用。

渲染到屏幕上时,一切都很好;GL_DEPTH_TEST已启用并且运行良好。

关于如何解决这个问题的任何建议?谢谢!

0 投票
1 回答
9883 浏览

android - Android OpenGLES 渲染到纹理

我为 iPhone 编写图形应用程序,并希望将我最近的应用程序“图层”移植到 Android 平台。Layers 是一款绘画应用程序,允许用户在屏幕上绘画并使用不同的画笔、颜色等创建多层绘画......并导出为 PSD。它有桌面同步,涂抹工具,很多好东西...... http://www.layersforiphone.com/

我周一开始研究 Android 平台,但遇到了一个大问题。我使用 OpenGL 来完成所有的绘图,因为它提供了最好的性能。但是,有几个地方我需要渲染成纹理然后使用纹理。例如:

  1. 使用画笔纹理和精灵线在纹理 A 中创建黑色笔触
  2. 将画笔颜色+alpha 放入 glColor4f 中,然后将纹理 A 绘制到屏幕上。

在 iPhone 上,我会随着用户手指的移动不断地执行此操作,并且我能够在第一代 iPod Touch 上达到 12-15fps。这是必要的,因为将颜色和 alpha 应用到构成画笔笔划的单个精灵不会产生正确的结果(因为精灵重叠并使笔划太暗)。

android 平台支持 OpenGL ES 1.0,但似乎省略了处理帧缓冲区的关键函数。我找不到将纹理绑定到帧缓冲区并使用 OpenGL 绘制到其中的方法。

以下是我通常在 iPhone 上的处理方式:

Android平台上有这样的东西吗?在 iPhone 上,OpenGL 比基于软件的绘图要快得多,并且是唯一可行的解​​决方案(相信我——我也写了一个 CoreGraphics 绘图应用程序......)。也许我可以在 Android 上采取另一条路线?我愿意跳过任何必要的环节,但除非性能良好(当您在屏幕上绘制时为 10fps+),否则我不会发布该应用程序。

0 投票
1 回答
1240 浏览

opengl - 将 OpenGL FBO 纹理渲染到 GLXPixmap

我正在编写一些代码,旨在: 1. 使用 FBO 渲染成 OpenGL 纹理。2. 从 FBO 纹理绘制到附加到 X Pixmap 的 GLXPixmap。3. 将 X Pixmap 绘制到屏幕上的一个窗口。

第 3 步效果很好,如果我用普通的 OpenGL 绘图替换 FBO 纹理,第 2 步效果很好。

但是,如果我执行上述操作,至少使用我拥有的代码,它就行不通了。如果我给 GLXPixmap 一个彩色背景,然后执行 1-3,屏幕上的窗口会变成白色,但我绘制的其他任何内容都不会出现。

所以我希望有人可以提供提示,或者给我一些简单的示例代码。我为此获得的代码相当复杂,但如果需要,我可以尝试编写一个简单的示例版本以在此处发布以供审查。

0 投票
3 回答
21985 浏览

opengl - opengl - 与帧缓冲区的先前内容混合

我正在通过帧缓冲区对象渲染到纹理,当我绘制透明图元时,这些图元与在该单个绘制步骤中绘制的其他图元正确混合,但它们没有与帧缓冲区的先前内容正确混合。

有没有办法将纹理的内容与传入的新数据正确混合?

编辑:要求提供更多信息,我将尝试更清楚地解释;

我使用的混合模式是 GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA。(我相信这通常是标准的混合模式)

我正在创建一个跟踪鼠标移动的应用程序。它绘制将前一个鼠标位置连接到当前鼠标位置的线,并且由于我不想在每一帧再次绘制线,我想我会绘制到纹理,从不清除纹理,然后只用它绘制一个矩形纹理上显示它。

这一切都很好,除了当我在纹理上绘制 alpha 小于 1 的形状时,它不能与纹理的先前内容正确混合。假设我在纹理上绘制了一些带有 alpha = .6 的黑线。几个绘制周期后,我在这些线上绘制一个 alpha = .4 的黑色圆圈。圆圈“下方”的线条被完全覆盖。虽然圆圈不是纯黑色(它与白色背景正确融合),但圆圈下方没有您所期望的“较暗的线条”。

但是,如果我在同一帧中绘制线条和圆圈,它们会正确融合。我的猜测是纹理与之前的内容不融合。就像它只与 glclearcolor 混合一样。(在这种情况下是 <1.0f, 1.0f, 1.0f, 1.0f>)