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

opengl - 如何使用像素缓冲区对象从 GPU 内存中读取 3D 纹理

我正在从片段着色器中将数据写入 3D 纹理,并且我需要将所述数据异步读回系统内存。异步启动打包操作到缓冲区对象的唯一方法似乎是glReadPixels()使用NULL指针调用。但是这个函数坚持要传递一个定义要读回的区域的矩形。现在我不知道在使用 PBO 时是否会忽略这些参数,但我认为不会。在这种情况下,我不知道传递什么给这个函数以获得整个 3D 纹理。即使必须读回单个切片(这将是一种愚蠢的 IMO),我仍然不知道如何与 OpenGL 通信以读取哪个切片。我错过了什么吗?

顺便说一句,我可以为每个切片使用单独的 2D 纹理,但如果我没记错的话,那会搞砸(3D-)mipmapping。我想使用 3D mipmap 来有效地在生成的 3D 纹理中找到感兴趣的区域。

PS 对次优标签感到抱歉,显然之前没有人问过 3d 纹理,因为我不允许创建新标签......

0 投票
1 回答
424 浏览

ios - 渲染到纹理与渲染到 CAEAGLLayer 支持的视图?

我对 OpenGL 环境的了解非常松散,所以这是我想要理解的。有人可以用通俗的话解释这两种渲染风格之间的区别吗?首先,我想了解渲染到纹理意味着什么,什么时候选择这样做合适?

0 投票
1 回答
2045 浏览

java - Opengl es:通过帧缓冲区渲染到纹理只渲染一种颜色

我试图在我的安卓游戏中实现运动模糊效果。

经过大量研究,我发现最好的方法是使用帧缓冲区对象将前一帧保存为纹理,并将其渲染到当前帧的顶部。所以看到一些关于如何做类似事情的不错的教程,我最终得到了这段代码,它基本上在纹理上渲染我的场景,然后将纹理绘制到默认帧缓冲区。

但是纹理只有一种颜色,就像我有一个绿色的explotion纹理只有绿色
我相信这是渲染缓冲区或纹理参数的问题

这是我的代码

0 投票
1 回答
237 浏览

java - 在同一表面上映射多个纹理

我正在渲染一个圆柱体并将两种不同的纹理映射到顶面和底面。

两种纹理都以下列方式加载:

当我尝试渲染纹理时出现问题(一个空白的,与前两个无关):

执行此代码后,映射在圆柱体顶部的纹理消失了,所有顶部都变为黑色......

为什么?

Ps:我的任务是将第三个渲染纹理映射到圆柱体顶部,覆盖已经存在的纹理..

0 投票
2 回答
2588 浏览

java - OpenGL ES:使用纹理:空白白色而不是纹理图像

我在 Android 平台上编码。我正在尝试对三角形使用纹理(从 Assets 文件夹加载图像)。当我的应用程序运行时,它只是三角形的空白(不是我想要的纹理)。

我读过其他一些资料,说图像必须是二的幂。我已经检查过了,我的图像是二的幂。(128 x 128)。这也是让我头疼的一个原因。

这是我的代码:(您应该在onDrawFrame方法中看到的主要代码,它包含我用于渲染的代码)

我的代码只是一个简单的例子。我有调试,一切都是真的。(如:成功加载图片)。但是,我不知道如何调试 OpenGL 应用程序。(意思是:debug的时候可以查看变量的参数,但是不知道是怎么回事,因为OpenGL比Canvas复杂多了——只用一行代码就有结果了:))

感谢帮助 :)

0 投票
2 回答
648 浏览

opengl - 渲染到纹理,纹理没有完整显示

基本上当我渲染到纹理时,看起来纹理的某些部分丢失了。

从左边开始,三角形和第一个四边形使用正常渲染,display()而右边的最后一个四边形和下面的一个分别是渲染有纹理的四边形和显示纹理本身内部的四边形。

基本上我看不到红点,只有蓝点。为什么?

在此处输入图像描述

0 投票
1 回答
659 浏览

ios - 屏幕外渲染纹理在屏幕上渲染空矩形

我正在尝试创建 OpenGL ES 1.1 纹理并填充渲染内容。

准备纹理:

将纹理渲染到场景中:

完整的源代码可在 Bitbucket 获得:https ://bitbucket.org/amjaliks/gl2/src/66ee4932e212/GL2/GL2View.m

还有其他内容正确呈现。问题仅在于此纹理 - 它呈现为白色矩形。

我研究了很多例子,但仍然无法弄清楚我做错了什么。什么不见​​了?


更新 1:我注意到,如果我在绑定时设置glClearColor()并调用,这些更改将保存到我的纹理中。因此,有一些问题和/或相关的事情。glClear()texFrambufferglDrawArrays()

我需要专门为我的设置矩阵模式和投影texFrambuffer吗?


更新 2:我也尝试使用glCopyTexImage2D将内容从“主”帧缓冲区复制到纹理。

Bitbucket 提供完整源代码:https ://bitbucket.org/amjaliks/gl2/src/b3339661650e/GL2/GL2View.m

结果是一样的。仅填充矩形。看起来我的矩阵肯定有问题。

0 投票
1 回答
2511 浏览

opengl - OpenGL render-to-texture-via-FBO -- 不正确的显示与正常的纹理

到纹理绑定的屏幕外帧缓冲区对象的屏幕外渲染应该是如此微不足道,但我遇到了一个问题,我无法绕开我的头。

我的完整示例程序(目前仅 2D!)在这里:

http://pastebin.com/hSvXzhJT

有关一些说明,请参见下文。

我正在创建一个 rgba 纹理对象 512x512,将其绑定到 FBO。此时不需要深度或其他渲染缓冲区,严格来说是 2D。

以下极其简单的着色器渲染到此纹理:

顶点着色器:

在 aPos 中,这只是获得一个包含 4 个 xy 坐标的四边形的 VBO (-1, -1 :: 1, -1 :: 1, 1 :: -1, 1)

因此,尽管帧缓冲区分辨率理论上应该是 512x512,但显然着色器将其“纹理”渲染到“全(关闭)屏幕四边形”,遵循 GLs -1..1 坐标范式。

片段着色器:

所以它设置了一个完全不透明的颜色,红色固定为 0.25,绿色/蓝色取决于 x/y 介于 0 和 1 之间的任何位置。

在这一点上,我的假设是渲染 512x512 纹理仅显示 -1..1 全(关闭)屏幕四边形,从 0..1 开始对绿色/蓝色进行片段着色。

所以这是我的屏幕外设置。在屏幕上,我有另一个真正可见的全屏四边形,具有 4 个 xyz 坐标 { -1, -1, 1 ::: 1, -1, 1 ::: 1, 1, 1 ::: -1, 1, 1}。同样,现在这是二维的,所以没有矩阵,所以 z 总是 1。

这个四边形由不同的着色器绘制,简单地渲染给定的纹理,教科书 GL-101 样式。在我上面链接的示例程序中,我有一个简单的布尔切换 doRtt,当它为 false(默认值)时,根本不执行渲染到纹理,并且此着色器仅显示使用当前目录中的 texture.jpg。

这种 doRtt=false 模式表明第二个屏幕四边形渲染器对于我当前的要求是“正确的”,并按照我的意愿执行纹理:垂直重复两次,水平重复两次(稍后将被钳制,重复只是为了测试此处),否则在没有纹理过滤或 mipmapping 的情况下进行缩放。

因此,无论窗口(以及视口)如何调整大小,我们总是会看到一个全屏四边形,其中单个纹理水平重复两次,垂直重复两次。

现在,使用 doRtt=true,第二个着色器仍然可以完成它的工作,但纹理从未完全正确缩放或绘制,这我不确定,因为不幸的是我们不能只说“嘿,将这个 FBO 保存到磁盘调试目的”。

RTT 着色器确实执行了一些部分渲染(或者可能是完整渲染,再次无法确定屏幕外发生了什么......)特别是当您将视口调整为比默认大小小很多时,您会看到纹理之间的中断重复,并不是我们非常简单的 RTT 片段着色器所期望的所有颜色都确实显示出来了。

(A) 要么:512x512 纹理是正确创建的,但我的代码没有正确映射(但是为什么使用完全相同的简单纹理四边形着色器使用 doRtt=false 的任何给定纹理.jpg 文件显示得很好?)

(B) 或: 512x512 纹理未正确渲染,并且 rtt 片段着色器以某种方式根据窗口分辨率改变其输出——但为什么呢?对于 x 和 y,屏幕外四边形始终为 -1..1,顶点着色器始终将其映射到片段坐标 0..1,对于这个简单的测试,RTT 纹理始终保持在 512x512!

请注意,屏幕外四边形和屏幕上四边形都不会改变它们的坐标,并且始终是“全屏”(两个维度均为-1..1)。

同样,这应该很简单。我到底错过了什么?

规格:OpenGL 4.2(但代码显然不需要任何 4.2 功能!),Nvidia Quadro 5010M,openSuse 12.1 64bit,Golang Weekly 2012 年 2 月 22 日。

0 投票
1 回答
1416 浏览

objective-c - OpenGL ES 上的运动模糊实现

我是 OpenGL ES 1.1(用于 IOS)纹理的新手,我在制作运动模糊效果时遇到了问题。在谷歌搜索过程中,我发现我应该在不同的时间将场景渲染为几个纹理,然后在屏幕上用不同的 alpha 值绘制所有这些纹理。但问题是我不知道如何实现这一切!所以,我的问题是:

  1. 如何在屏幕上绘制 2D 纹理?我应该制作一个正方形并将纹理放在上面吗?或者,有一种方法可以直接在屏幕上绘制纹理吗?
  2. 如何在屏幕上以不同的 alpha 值绘制多个纹理(一个接一个)?

我已经提出了一些想法,但我不确定它们是否正确。提前致谢!

0 投票
0 回答
1674 浏览

android - 为什么我得到 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT?

我正在为安卓开发游戏,但我的目标设备有点慢。在这些设备中,颜色以不同的方式显示,在某些情况下,红色非常不透明。作为对此的解决方案,我根据设备制作了一个着色器 opengl 正确的颜色。我从 SD 加载纹理,然后我执行渲染到纹理以应用着色器,最后我删除没有效果的纹理。每次纹理加载时执行一次。问题是在某些时候我的代码渲染到纹理开始失败。

这工作正常,但在某个点开始失败并总是返回 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT。

我不知道,因为它开始失败。

更新:现在我只对所有加载的纹理使用一个 FBO,但是我在我的 android 设备上收到了一个新错误: