3

这是问题所在,我正在使用 OpenGL ES 在 iPhone 上做一个小项目。我从 Brad Larson 的ColorTracking 应用程序开始(非常感谢 Brad 提供它)并根据我的需要对其进行了调整。

一切正常,但是,当我在我的 中使用forkCVPixelFormatType_420YpCbCr8BiPlanarVideoRange时,因为我将处理灰度图像并且不需要任何颜色,屏幕上的结果图像沿 y 轴平移,并且屏幕外的部分呈现在顶部:kCVPixelBufferPixelFormatTypeKeyAVCaptureVideoDataOutput

这是一个截图:

在此处输入图像描述

当然,您需要将glTexImage2D调用中的数据类型从GL_RGBAto更改GL_LUMINANCE为才能正常工作。

使用捕获会话中的GL_RGBA纹理不会发生此行为。kCVPixelFormatType_32BGRA

有谁知道为什么会发生这种情况,以及如何解决这个问题?任何帮助深表感谢。

4

1 回答 1

3

我找到了这个问题的答案:

glTextImage2D更改调用以获得正确的基地址CVImageBufferRef

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bufferWidth, bufferHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddressOfPlane(pixelBuffer));

// should become 

glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, bufferWidth, bufferHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0));

在这种情况下,kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange我们需要获取包含亮度数据的第一个平面。注意数据类型是GL_LUMINANCE,数据指针是CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0)

于 2011-11-24T02:41:17.390 回答