问题标签 [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.
visual-c++ - 如何使用 OpenGL 保存 OpenGL 绘制?
我用 OpenGL 命令绘制了一个屏幕。而且我必须将此屏幕保存为 .bmp 或 .png 格式。但我做不到。我正在使用 glReadpixels 但我无法继续。如何使用 OpenGL 在 c++ 中保存此绘图?
opengl - 来自 FBO 的 Opengl 纹理(无论是否使用 mimap)
在使用 FBO 时我必须遗漏一些明显的东西:
我在应用程序开始时调用 TMyForm::Init() 一次:
在 Draw() 函数中,我将缓冲区发送到卡片(渲染场景正常)和预览窗口(全黑或全白,取决于我切换回默认窗口上下文还是 fbo 上下文):
所以我的问题是“第 2 部分”没有做我希望的事情:将 fbo 内容纹理化到当前窗口。我尝试更改“glTexCoord2d”但没有成功。
c++ - Qt / C++ - 转换原始二进制数据并将其显示为图像(即QImage)
我有一个 C++ Open GL 应用程序,它呈现动画显示,并使用 glReadPixels() 捕获帧缓冲区内容,然后将其存储为一维字符数组。
我可以获取缓冲区内容并将其保存到 char 数组中,如下所示:
然后我使用套接字通过网络发送这些原始数据,这对我来说不是问题。我有一个 Qt 桌面客户端(它使用套接字与 OpenGL 应用程序通信)
此客户端程序可以成功接收 Open GL 应用程序发送的原始二进制数据。
如何在我的客户端应用程序中从这些二进制数据中渲染图像?Qt 是否有任何内置函数/库来从二进制数据(由 glReadPixels 生成)绘制图像?
在通过套接字发送它们之前,我是否需要将这些原始二进制数据编码/解码为 base64 类型?为什么或者为什么不?
java - lwjgl 中的 glReadPixels() 使 prog 崩溃
在使用 lwjgl 用 Java 开发的一种轻型视频游戏中,我使用 glReadPixels() 来获取用户用鼠标瞄准的对象(所有对象都与一种颜色相关联)。它在我的 Windows 上运行良好,但是当我在我的 Ubuntu 上调用 glReadPixels() 时程序崩溃而没有引发任何异常。由于某些图形驱动程序与旧版台面之间的不兼容,我已经阅读了一些有关类似问题的主题。有谁知道 lwjgl 是否有类似的问题?知道这有什么问题吗?
这是一段代码:
c++ - 简单的 2D 碰撞检测 C++
我对这一切有点陌生,但我正在尝试用 C++ 制作一个简单的 2D 游戏。我决定做一种迷宫类型的游戏,我正在做的是将迷宫绘制为纹理,然后当我的角色在这个迷宫中移动时使用另一个纹理。
但是,我在碰撞检测方面非常挣扎,因此我的角色不只是穿过墙壁。有人告诉我,我可以使用 glReadPixels 来查找背景的颜色,但是每当我尝试这样做时,它都会忽略颜色并继续穿过墙壁。
任何人都可以帮我解决这个问题并告诉我该怎么做,因为我在任何地方都找不到任何可以提供帮助的东西。提前致谢。
objective-c - iOS 上的 OpenGL ES - glReadPixels() 返回侧面带有黑条的图像
我喜欢使用片段着色器将简单的纹理渲染到 4 个顶点,并使用 glReadPixels 读取图像分辨率。我将(readPixel)大小设置为(源)图片大小,但我没有得到完整的图像。右侧总是有一个黑条。并且图像似乎被压缩了。
图像的返回部分是正确的。它显示了我的 sobel 着色器的分辨率。所以我不认为 ReadPixel 部分或 SetImage 部分有一些错误。但我不知道...
这是我设置图像源的方法:
这里是渲染纹理的部分:
这是读取决议的部分:
我不知道我在哪里犯了错误。我在这个论坛和 khronos 论坛上进行了搜索,但没有找到解决方案(而且我没有找到具有相同错误描述的案例)。
也许是另一个重要或令人困惑的信息 - 我也尝试将代码放入 c++ 类。但是,当我使用 EAGLContext 走出 Objective C 类时,我得到了正确的图片尺寸,但分辨率错误,分辨率图像只包含雪,但侧面没有黑条。
有人知道这个错误的解决方案吗?
问候,克里特
iphone - 开启多重采样时 glReadPixels 不起作用
glReadPixel 在未启用多重采样时运行良好。但是当启用多重采样时,它会给出 0x502 opengl 错误并且屏幕未被捕获。经过一番研究,它似乎与解析多样本缓冲区有关 - 'glResolveMultisampleFramebufferAPPLE'。但我无法让它在“takeAsCGImage”方法中工作,如下所示
有人可以帮忙吗?
谢谢,简单
ios - iOS:渲染到深度缓冲区并从中读取以进行离屏处理
问题
我的主要目标是获取设备上触摸的模型坐标,以便检查您触摸的内容。我和一个大模型一起工作,必须画很多东西,这些东西也必须是可触摸的。
为了实现这一点,我知道两种可能的方法:一方面,我们可以进行光线投射并将相机的指向矢量与模型相交,我们必须将其存储在内存中的某个位置。另一方面,这就是我想要做的,我们可以用旧的方式来做:
并将屏幕坐标转换回模型坐标。直到这里我是正确的吗?你知道在 opengl 应用程序中进行触摸处理的其他方法吗?如您所见,该函数将 winz 作为参数,这将是屏幕坐标处片段的高度,此信息通常来自深度缓冲区。我已经知道 opengl-es 2.0 不提供对其内部使用的深度缓冲区的访问,就像在“普通”opengl 中那样。那么我怎样才能得到这些信息呢?
苹果提供了两种可能性。要么创建一个带有深度附件的屏幕外帧缓冲区,要么将深度信息渲染到纹理中。对我来说可悲的是,该手册没有显示将信息读回 iOS 的方法。我想我必须使用 glReadPixels 并从他们那里读回来。我实现了我能找到的所有东西,但无论我如何设置它,我都没有从屏幕外帧缓冲区或纹理中得到正确的高度结果。我期望得到一个带有 z 值的 GL_FLOAT 。
z:28550323
r:72 g:235 b:191 [3]:1 <-- 总是这个
代码
胶合项目
就像我们现在一样,glu 库在 iOS 中不可用,所以我查找了代码并基于此源实现了以下方法:link。GLKVector2 屏幕输入变量是屏幕上的 X、Y 坐标,由 UITabGestureRecognizer 读取
}
它尝试从深度缓冲区或深度纹理中读取数据,这两者都是在绘制时生成的。我知道这段代码效率很低,但首先它必须在我清理之前运行。
我尝试只绘制额外的帧缓冲区(在这里注释掉),只绘制到平铺和一起,没有成功。
画
}
z 的值可能来自不同的类型。它只是一个必须放回浮点数据类型的浮点数吗?
谢谢你的支持!模式
1. 编辑
我现在也从我渲染的纹理中获取 RGBA。为此,我在绘制时激活了单独的帧缓冲区,而不是深度扩展,并将纹理连接到它。我编辑了上面的代码。现在我得到以下值:
如您所见,读取了 rgba 值。好消息是,当我触摸没有模型的天空时,值始终相同,而触摸模型时,值会有所不同。所以我认为纹理应该是正确的。但是我现在如何从这 4 个字节中重新组合出真正的值,然后可以将其传递给 gluUnProject?我不能把它扔到一个浮点数上。
opengl - 带 PBO 的异步 glReadPixels
我想使用两个 PBO 以替代方式读取像素。我以为PBO的方式会快很多,因为glReadPixels在使用PBO的时候会立即返回,而且很多时间可以重叠。
奇怪的是似乎没有太大的好处。考虑一些代码,如:
结果是
PBO的方式稍微快一点,但没有令人满意的即时回报。</p>
我的问题是:
- 影响 glReadPixels 性能的因素是什么?有时,它的成本达到 10 毫秒,但这里是 1.3 毫秒。
为什么立即返回的成本高达 1.2 毫秒?是太大还是正常?
==================================================== ==========================
根据与一个demo的对比,我发现了两个因素:
- GL_BGRA优于GL_RGBA,1.3ms=>1.0ms(无PBO),1.2ms=>0.9ms(有pbo)
- glutInitDisplayMode(GLUT_RGB|GLUT_ALPHA) 而不是 GLUT_RGBA, 0.9ms=>0.01ms。这就是我想要的性能。在我的系统中,GLUT_RGBA=GLUT_RGB=0。过剩阿尔法=8
然后还有两个问题:
- 为什么 GL_BGRA 比 GL_RGBA 好?是只针对特定平台还是针对所有平台?
- 为什么 GLUT_ALPHA 如此重要以至于它会极大地影响 PBO 的性能?
iphone - 什么时候可以使用 glReadPixels?
我想知道GLReadPixels
函数的用途。/它是如何读取像素的?它是否在 glreadFunction 提供的范围内读取主屏幕上的GLKView
像素或像素或任何内容。UIView
或者它只能在我们使用时使用GLKView
??
请澄清我的疑问。