问题标签 [glreadpixels]

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 投票
0 回答
550 浏览

ios - glReadPixels 白点问题

我正在尝试使用 OpenGL ES 在我的 iPad 上制作屏幕截图。这确实有效,但上面有空白点。这些空白点似乎是渲染的对象。我也尝试过使用其他缓冲区,但它们似乎都不包含实际的 3D 对象?

我正在使用 String SDK 的示例代码。

问题图片:

问题

EAGLView.m

截图代码

EAGLView.m

String_OGL_TutorialViewController.m

0 投票
1 回答
639 浏览

opengl - 具有重叠纹理的 glReadPixels() alpha

我正在尝试使用 glReadPixel() 获取纹理的 alpha 值。我遇到的问题是,一旦 alpha 值像素低于 0.5f,它就会开始合并背景对象的 alpha 值。我永远无法获得 0.0f 到 0.49999f 的 alpha 值。有没有办法忽略任何背景对象的 alpha 值并获得顶部纹理或对象的 1 像素 alpha 值?

在此处输入图像描述

0 投票
1 回答
1538 浏览

opengl - glReadPixels() 返回不准确的值

我正在尝试实现洪水填充算法。但是 glReadPixels() 返回的像素的浮点 RGB 值与我设置的实际值略有不同,导致算法失败。为什么会这样?

输出返回的 RGB 值进行检查。

0 投票
1 回答
2601 浏览

iphone - CVOpenGLESTextureCacheCreateTextureFromImage 而不是 glReadPixels

整整 3 天,我一直在尝试提高基于 glReadPixels 的 AVAssetWriter 的性能。我已经浏览了 Apple 的 RosyWriter 和 Camera Ripple 代码以及 Brad Larson 的 GPUImage,但我仍然摸不着头脑。我也一直在尝试使用这些链接中的实现:

使用 ios-5-texture-cache-api 渲染到纹理

iphone-opengl-es-2-0 中的更快替代 glreadpixels

......还有更多,但无论我尝试什么,我都无法让它发挥作用。视频最终没有被处理,或者出现黑色,或者我收到各种错误。我不会在这里介绍所有内容。

为了简化我的问题,我想我会专注于从屏幕上的 openGL 预览 FBO 中获取快照。如果我能得到这个工作的一个单一实现,我应该能够解决剩下的问题。我尝试了上面第一个链接的实现,看起来像这样:

这里到底应该发生什么?我的缓冲区最终是一堆零,所以我想我需要做一些额外的事情来从上下文中提取像素?...或者我错过了什么?

我想要实现的只是与我今天使用的更快的等价物:

0 投票
0 回答
756 浏览

iphone - OpenGL ES - glReadPixels 与 TextureCached

我需要从 OpenGL ES 2.0 的帧缓冲区中读取像素数据。我知道这可以通过 glReadPixels 轻松完成,但是从 iOS 5 开始,我们可以使用 TextureCached 对象来加快阅读速度。

我已经实现了 Brad Larson 提出的解决方案(我将永远感谢他,我认为他在社区分享这么多知识方面做得很好......)在 iPhone OpenGL ES 2.0 中替代 glReadPixels 的速度更快

一切似乎都正常,我得到了正确的数据,如果我将它与 glReadPixels 进行比较,数据是相同的。当我测量这两种可能解决方案的性能(检索数据时消耗的时间)时,我的问题就出现了。

这是我的结果:

(帧缓冲区和纹理大小320x480像素)

GPUImageProcessingDemo[1252:707] glReadPixels 2750 us

GPUImageProcessingDemo[1252:707] 纹理读取 1276 us

GPUImageProcessingDemo[1252:707] glReadPixels 2443 us

GPUImageProcessingDemo[1252:707] 纹理读取 1263 us

GPUImageProcessingDemo[1252:707] glReadPixels 2494 us

GPUImageProcessingDemo[1252:707] 纹理读取 1375 us

这似乎很有趣,因为它几乎是使用 glReadPixels 所需时间的一半。问题是当我将纹理大小更改为更大一点时,我会得到以下结果:

(帧缓冲区和纹理大小480x620像素)

GPUImageProcessingDemo[1077:707] glReadPixels 2407 us

GPUImageProcessingDemo[1077:707] 纹理读取 2842 us

GPUImageProcessingDemo[1077:707] glReadPixels 2392 us

GPUImageProcessingDemo[1077:707] 纹理读取 3040 us

GPUImageProcessingDemo[1077:707] glReadPixels 2224 us

这有意义吗?还是我应该期望总是得到更好的结果?

0 投票
1 回答
1021 浏览

iphone - glReadPixels 在 iPhone 上不起作用

我正在尝试在 iPhone 上截取 GLView 的屏幕截图。我写了以下代码:

在模拟器中完美运行。不幸的是,当我尝试在 iPhone 4S glReadPixels 上运行它时,什么也没做。我故意将数组设置为 0xff 以查看是否可以查看它是否在做任何事情,而我将数组设置为什么也没关系 glReadPixels 什么都不做。它也不会报告任何错误。

除非 iPhone 为我进行设置,否则我不会使用多重采样缓冲区。

有没有人知道发生了什么?它让我发疯:(

0 投票
2 回答
4581 浏览

java - 如何使用 glReadPixels() Bufferedimage 水平翻转图像并使用 ImageIO 输出?

如何翻转屏幕截图图像?我在其他任何地方都找不到我的问题。
示例代码:

基本上,该代码用于捕获屏幕并以“png”格式存储。
但它输出的是水平翻转的图像,因为glReadPixels();
左下角到右上角读取。

那么如何在 I 之前水平翻转图像ImageIO.write();

非常感谢,罗斯。

0 投票
1 回答
229 浏览

ios - 单独图层上的 glReadPixels

我会直截了当:)

在此处输入图像描述

从上面的 480 x 320 图中,我想我可以像蠕虫游戏一样检测像素级别的碰撞。

我想知道的是如何在不同的图层上采样像素。正如您在图中看到的那样,当蠕虫下降时,我只想使用 glReadPixels() 对黑色像素进行采样,以查看蠕虫是否与任何地形站立(碰撞)但是当我上次尝试时,glReadPixels() 采样屏幕上的所有像素,没有任何“层”的想法。

白色像素是不应成为采样一部分的背景。

我是否可能假设在单独的缓冲区上有我的地形的黑白副本并在该单独的缓冲区上调用 glReadPixels() 以便背景图像(白色像素)不会被采样?

在我在屏幕上绘制我的地形之前,在我绘制背景图像的相同缓冲区/上下文中。

有任何想法吗?

0 投票
2 回答
977 浏览

screenshot - 如何使用 LWJGL 制作简单的截图方法?

所以基本上我现在在搞 LWJGL 一段时间了,我突然停下来,周围有很多烦恼glReadPixels()
以及为什么它只会从左下 -> 右上角读取。
所以我在这里回答我自己的问题,因为我弄清楚了所有这些东西,
我希望我的发现可能对其他人有用。

作为旁注,我正在使用:

0 投票
1 回答
3647 浏览

file - OpenGL - 创建视频输出文件

我希望能够使用 OpenGL 创建视频输出文件,而不是通常在屏幕输出上显示。我正在考虑不使用 glutPostRedisplay() 或(SFML 版本,就像这样:) window.Display(),而是以某种方式使用 glReadPixels()。

glReadPixels 将像素内容放入内存中的数组中(您可能已经知道),但是如何将其转换为帧,并将多个帧串在一起形成一个视频文件?视频文件的格式是什么,以便我可以播放?

我应该解释一下我为什么要这样做:很多物理模拟可能需要很长时间才能计算出足够的信息来显示一帧,所以最好让它运行一夜,第二天早上播放视频文件。您不会希望每 5 分钟返回一次以查看发生了什么。