- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经设置了一个 AVCapture session ,并在委托(delegate)方法中使用以下代码尝试使用输出设置 GLKBaseEffect 纹理,但是我得到的只是黑色。我应该怎么做才能让它发挥作用?
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer (CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer);
effect.texture2d0.name = CVOpenGLESTextureGetName(pixelBuffer);
}
最佳答案
TLDR:我认为您不能将相机输出与 GLKBaseEffect
一起使用 - 来自相机的数据是双平面 YUV 格式,因此您需要自定义片段着色器在渲染时将其转换为 RGB,GLKBaseEffect
不执行自定义着色器。
这里似乎有一些 API 困惑,所以如果您想了解更多背景知识,请继续阅读...
尽管 CVOpenGLESTexture
类型派生自 CVPixelBuffer
,但您从 CMSampleBufferGetImageBuffer
获取的图像缓冲区不会自动成为 OpenGL ES 纹理。每次使用 CVOpenGLESTextureCache
从相机获取帧时,您都需要从图像缓冲区创建纹理。
Apple 的 GLCameraRipple
示例代码说明了如何执行此操作。这是一个快速概述:
setupAVCapture
方法调用 CVOpenGLESTextureCacheCreate
以创建绑定(bind)到该上下文的纹理缓存。captureOutput:didOutputSampleBuffer:fromConnection:
中,他们使用 CMSampleBufferGetImageBuffer
从样本缓冲区获取图像缓冲区,然后使用纹理缓存的 CVOpenGLESTextureCacheCreateTextureFromImage
函数。您需要两个纹理,因为图像缓冲区在两个位平面中具有 YUV 颜色数据。glBindTexture
进行渲染。一般来说,您可以通过设置 GLKBaseEffect
的 texture2d0.name
并告诉它 prepareToDraw
来替换 glBindTexture
调用, 但 GLKBaseEffect
无法呈现 YUV。因为 YUV 到 RGB 转换需要自定义片段着色器,GLKBaseEffect
不会帮助您。然而,正如 GLCameraRipple
示例所示,您需要编写的自定义着色器并不那么可怕。
关于iOS GLKit : set GLKBaseEffect texture with camera output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22001349/
场景 我正在构建一个应用程序来处理视频帧的色度值。我正在使用来自另一个项目的 Objective-C 代码并将其翻译成 Swift。但是我遇到了一段奇怪的代码,我想将其翻译成 Swift,如果我能弄清
我正在 opengles 中制作一个基本应用程序,我从“raywenderlich”Glkit 教程开始。这将在应用程序的启动屏幕中显示一个立方体。他在教程中提到了以下几行来执行此操作。 To mak
有没有一种方法可以将CATransform3D转换为GLKMatrix4,还是我总是需要手动将它们从值转换为值? 我想转换会更快。 最佳答案 不幸的是,到目前为止还没有。 Apple最有可能使用隐藏的
我在使用 GLKit 对 PNG 图像着色时遇到问题。 我有一个白色 PNG 图像,我将其加载到应用程序中,然后使用它来创建纹理: UIImage *image = [ UIImage imageNa
过去几天我一直在使用一些具有颜色属性和位置属性的 GLKit 代码,但是当我尝试添加普通属性时,它每次都会崩溃。 顶点着色器: attribute vec4 SourceColor; attrib
我有一个使用 glKit 运行的游戏,我想在每一帧渲染后使用着色器添加一些后期处理效果。 是否可以在 glKit 下执行此操作? 最佳答案 这是可能的。 您需要创建自己的屏幕外帧缓冲区对象和相关纹理。
我正在尝试使用 OpenGL ES 和 GLKit 绘制类似这样的东西 但是我明白了 虽然纹理是透明的,但模型的上层替换了下面的纹理而不是混合。有可能以某种方式修复它吗? - (void)setup
我使用以下链接获取在 iOS 中绘制 3D 立方体的源代码。 http://www.raywenderlich.com/5235/beginning-opengl-es-2-0-with-glkit-
我最近开始了一个基于 OpenGL 示例的新 iOS 项目。我添加了自己的相机移动代码,并且添加了一个包含 Block 实例的 NSMutableArray(当前仅包含 3D 位置)。我已经修改了绘图
当我尝试在 OpenGl ES 2.0 中创建一个带有附加纹理的 FBO 时,如下所示: glGenFramebuffers(1, &framebuffer); glGenTextur
我正在运行 XCode 为 iOS 的 OpenGL 项目创建的样板 OpenGL 示例代码。这会设置一个简单的 ViewController 并使用 GLKit 来处理其余的工作。 应用程序的所有更
我正在尝试转换 OGL ES 1.1。代码到 GLKit。 GLKit 提供了一对纹理插槽: 纹理2d0 纹理2d1 每个纹理都有一个环境模式: GLKTextureEnvModeReplace, G
我是 OpenGL/GLKit 的新手,在深度测试方面遇到了麻烦。下图显示了一个柱子,有五个横梁与它相交。它们都在中间(柱子内部)相遇,但正如您所见,本应被遮挡的光束部分仍然可见。它们疯狂地闪烁,当我
我正在使用 Ray Wenderlich 的教程使用 GLKit 制作一个简单的 OpenGlES 2 应用程序,但我遇到了一些问题。 我将示例代码更改为通过将顶点和索引数据添加到现有顶点和索引数据结
我使用了 this link 中的代码映射人脸的纹理。此代码使用 GLKIT 来呈现图像。代码在模拟器中运行良好,但如果我在设备中运行,则相同的代码无法运行。以下是它在设备中而不是在我的 ipad 中
我一直在阅读使用 GLKit 和您自己的自定义着色器是多么容易。但是,到目前为止,我还没有找到有关如何实际操作的任何信息。如何将我自己的着色器“插入”到现有的 GLKit 项目中? 最佳答案 好吧,你
我刚刚安装了当前的 Xcode 4 版本,并实现了新的“GLKit”API,该 API 也用于 iOS 的 OpenGL 模板。所以,我想开发一款适用于 iOS、Mac 和 Windows 的跨平台游
在 iOS 5 中,使用 EAGLView,您可以: glPushMatrix(); glTranslatef(x, y, 0.0f); glDrawArrays(GL_TRIANGLE_STRIP,
我几乎完成了我的应用程序。其中一个 View 使用 GLKit。我只是内存有问题。基本上发生的事情是,当显示 GLKView 时,内存消耗不断上升(在 Instruments 中看到)。在某个时候它显
我正在尝试使用 GLKit 绘制半透明多边形,但没有成功。所以我想知道是否有可能首先在 GLKit 中使用半透明多边形,因为我知道它在 OpenGL 的标准实现中不受支持;但可以使用自定义着色器进行模
我是一名优秀的程序员,十分优秀!