问题标签 [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 投票
5 回答
8163 浏览

python - 从 OpenGL glReadPixels 获取数据(使用 Pyglet)

我在应用程序的 Python 中使用 Pyglet(和 OpenGL),我正在尝试使用 glReadPixels 来获取一组像素的 RGBA 值。我的理解是 OpenGL 将数据作为打包整数返回,因为这就是它们在硬件上的存储方式。但是,出于显而易见的原因,我想将其转换为正常格式以供使用。根据一些阅读,我想出了这个:http ://dpaste.com/99206/ ,但是它失败并出现 IndexError。我该怎么做呢?

0 投票
3 回答
6782 浏览

c++ - glReadPixels() 真的很慢,从鼠标位置获取 OpenGL 坐标的更好解决方案?

这是我用来在 3d 场景中获取鼠标位置的代码:

但我注意到一件坏事......每帧对该函数进行 1-2 次调用使 CPU 使用率达到 100%,3 次或更多调用 200% CPU 使用率(我有 4 个内核,1-2 次调用 = 25%,3 次或更多调用= 50%,我想我不能让它高于 50%..)

有没有其他方法可以有效地做到这一点?我每帧使用 4 次调用该函数,所以我知道我应该为我的场景渲染哪些区域(我从每个屏幕角落获取它们)。

我也用它来知道我用鼠标指向哪个地方,所以我需要它实时,但我想使用更少的 CPU,因为即使只有 1 个调用,它也能 100% 使用单核系统。

编辑

我已经尝试过 glPushName() 方法,但它甚至更慢,在我的 GPU 中比在 CPU 中更慢。此外,当我在程序中不使用单个 glReadPixels() 调用时,我的 CPU 使用率只有 0-1%。奇怪的是我得到了很高的 CPU 使用率,但它并没有像你期望的 100% 使用率那样使程序滞后......唯一的问题是当我在我的程序打开时使用其他程序时,然后使用它们就会滞后.

0 投票
1 回答
1046 浏览

opengl - glfwOpenWindow 和 glReadPixels 模式?

假设我打开一个 glfw 窗口:

然后,我尝试用以下方式读回它:

我不确定我应该在 ..1.. 和 ..2.. 中添加什么;我认为 ..1.. 应该是 GL_RGBA,但不知道 ..2..

谢谢!

0 投票
2 回答
2420 浏览

iphone - glReadPixels 在特定的渲染缓冲区宽度上崩溃

我需要阅读 CAEAGLLayer 的内容,它有各种宽度和高度(基于背景图像大小)。在 iPad 模拟器上一切正常,但在设备上我有崩溃或奇怪的水平线而不是内容。宽度不会发生崩溃,例如,从 537 到 544 像素

我正在使用以下代码

0 投票
1 回答
909 浏览

iphone - iphone glReadPixels 问题

我正在使用 OPENGL ES 在 Iphone 中绘制一个 PIE 字符。现在我需要检查用户点击的饼图的颜色。当我单击任何饼图时,它有时会返回正确的值,有时会不正确,有时只会返回 0,0,0。

'(void) handleTap:(UITapGestureRecognizer *) 识别器{

CGPoint lPoint = [识别器 locationOfTouch:0 inView:mGLView];

字节 aPixel[4]; glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(lPoint.x, lPoint.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &aPixel[0]);

NSLog(@"%i",glGetError()); NSLog(@"点 X = %f Y = %f %d %d %d",lPoint.x, lPoint.y, aPixel[0],aPixel[1],aPixel[2]);'

0 投票
1 回答
1825 浏览

iphone - glReadPixels 清除 openGL ES 2 中的缓冲区?

我有一个 OpenGL ES 2 绘图应用程序(iOS 4),所以我在我的 CAEAGLLayer 中保留支持,而不是在每一帧上清除:

我有一个按钮,可以使用下面的代码将作品保存到相册。这就是问题所在。当它完成保存并且我再次开始绘图时,整个缓冲区被清除,我的绘图在空白屏幕上从头开始。有没有办法防止这种情况?我希望能够从我刚刚保存的相同状态继续绘图。

我正在运行相同的代码以保存在 OpenGL ES 1 中,并且该问题不会在那里发生。此外,此问题仅在 iPhone 设备 (3GS) 上可见,在模拟器上不可见。让我知道你是否有想法。谢谢。

0 投票
1 回答
1508 浏览

iphone - iPhone OpenGL ES:glReadPixels 不工作

我尝试使用 glReadPixels 实现一个简单的拾取功能,但是当我单击一个颜色为 1 的对象时,我会根据单击该对象的位置返回不同的值?有没有特殊的照明等?这是怎么回事?有时会返回全零。我关掉了所有东西(纹理等),但仍然没有快乐。

我以为这个函数会返回你点击的像素的颜色?

更新:添加了这个来修复它:

0 投票
2 回答
696 浏览

java - OpenGL - 特定深度的像素颜色

我在 OpenGL 中渲染了一个从 gluOrtho 角度看的 3D 场景。在我的应用程序中,我正在查看体积为 100x70x60mm(我有 1000x700x600 像素)的立方体的正面。在这个立方体内,我渲染了一个简单的蓝色球体,它正好位于中间并“填充”立方体(半径 300 像素)。

我现在想读取立方体内特定点的像素(3D)的颜色值;即我想知道说点(100,100,-200)是蓝色还是空白(黑色)。

glReadPixels 只允许对颜色进行 2D 提取,我已经使用 DEPTH_COMPONENT 进行了尝试,但不确定这应该以字节形式返回什么?有没有办法将两者结合起来?我错过了什么吗?

我正在使用带有 Java 和 JOGL 的 Eclipse。

0 投票
1 回答
1638 浏览

android - Android中的glReadPixels()问题重建框架

我正在开发一个使用 Android 的增强现实项目。该代码捕获相机视频,找到标记并在其顶部显示一个立方体。在此之后,找到一个运动矢量(以在 x 和 y 方向上移动的像素的形式)。我需要做的是从 GL 层读取像素并在将它们移动运动矢量指定的距离后再次绘制它们。GL 层是使用 GLSurfaceView 类指定的,它是一个透明层。我面临的问题是,当我使用 glReadPixels() 读取像素并将其转换为 480x800 数组(连接一个屏幕分辨率)时,我得到了立方体的 3 个不同部分而不是一个。我打算在此之后通过运动矢量移动像素并使用 glDrawPixels() 将像素放回帧缓冲区请帮助我解释相同的内容。使用 glReadPixels 时我是否缺少某些东西,以及是否有其他功能可以帮助我实现相同的功能。我正在考虑使用 glBlitFrameBuffer() 但这不受 android GL10 类的支持。我附上了我正在读取像素并将它们更改为二维矩阵的代码部分以及我使用 MatLab 重建的像素图像。抱歉,我不允许发布图片。如果有人看到图片后可以帮助我,请在此处发布,我可以将图片邮寄给您。万分感谢 !!!我附上了我正在读取像素并将它们更改为二维矩阵的代码部分以及我使用 MatLab 重建的像素图像。抱歉,我不允许发布图片。如果有人看到图片后可以帮助我,请在此处发布,我可以将图片邮寄给您。万分感谢 !!!我附上了我正在读取像素并将它们更改为二维矩阵的代码部分以及我使用 MatLab 重建的像素图像。抱歉,我不允许发布图片。如果有人看到图片后可以帮助我,请在此处发布,我可以将图片邮寄给您。万分感谢 !!!

任何帮助将不胜感激。

0 投票
3 回答
2871 浏览

performance - glReadPixels() 读取 GL_DEPTH_COMPONENT 很慢

我的应用程序依赖于从帧缓冲区读取深度信息。我已经用 glReadPixels(0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, &depth_data) 实现了这个

然而,这运行速度非常慢,它使我的应用程序从平稳的 30fps 变为滞后的 3fps。如果我尝试读取其他维度或数据,它会在可接受的水平上运行。

概述:

  • 没有 glReadPixels -> 每秒 30 帧
  • glReadPixels(0, 0, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth_data); -> 每秒 20 帧,可接受
  • glReadPixels(0, 0, 宽度, 高度, GL_RED, GL_FLOAT, &depth_data); -> 每秒 20 帧,可接受
  • glReadPixels(0, 0, 宽度, 高度, GL_DEPTH_COMPONENT, GL_FLOAT, &depth_data); -> 每秒 3 帧,不可接受

与其他调用相比,为什么最后一个调用如此缓慢?有什么办法可以补救吗?

宽度 x 高度大约为 100 x 1000,随着尺寸的增加,调用变得越来越慢。

我也尝试过使用像素缓冲区对象,但这对性能没有显着影响,它只会将缓慢延迟到 glMapBuffer() 调用。

(我已经在 MacBook Air nVidia 320m graphics OS X 10.6 上对此进行了测试,奇怪的是,我的旧 MacBook Intel GMA x3100 读取深度缓冲区的速度约为 15 fps。)

更新:将 GLUT_MULTISAMPLE 排除在 glutInitDisplayMode 选项之外,让应用程序再次恢复到平滑的 20fps 带来了天壤之别。我不知道该选项首先是做什么的,谁能解释一下?