通过CVOpenGLESTexture翻转OpenGL ES纹理

时间:2012-07-20 23:57:41

标签: ios opengl-es-2.0

在我进入OpenGL ES 2.0的过去一天,在尝试将两个投影纹理(一个精灵动画和一个视频文件纹理)应用到天空盒时,我开始只是像键盘一样敲击键盘上的手,奇迹般地,一切都开始起作用了。

但是,从视频文件创建的纹理会颠倒翻转。换句话说,(0,0)的纹理坐标似乎映射到(0,1),反之亦然。

从CVImageBufferRef创建视频文件纹理的函数CVOpenGLESTextureCacheCreateTextureFromImage()包含一个参数" CFDictionaryRef textureAttributes。"

CVOpenGLESTextureCache.h有用地解释:"包含用于创建CVOpenGLESTexture对象的属性的CFDictionaryRef。可能是NULL。"

我立刻想到了GLKTextureLoader,它允许你传入一个选项字典,其中一个可用选项用于翻转纹理。

所以,我在两点上有点困惑:

  1. 传入属性的CFDictionaryRef会让我轻松改变纹理的内容,比如旋转吗?或者它是否意味着'属性'在着色器中? (我不认为它很可能意味着着色器感,但我也认为将它们称为属性而不是选项是奇怪的。)

  2. 是否有一个键/值对的某个列表会告诉它做有用的事情?

  3. 我想在找到其他方法进行翻转之前先研究一下,因为如果它可以在这里进行,那么它似乎是最简单的方法,如果程序确实平行于GLKTextureLoader的选项。

1 个答案:

答案 0 :(得分:0)

在再次阅读了Apple的RosyWriter示例代码后,我意识到在使用CVOpenGLESTextureCacheCreateTextureFromImage()创建纹理后,他们通过修改顶点的纹理坐标来翻转纹理。

由于我在顶点着色器中投影纹理和计算纹理坐标,我认为对我来说最简单的解决方案是在将其放入xcode之前翻转实际的电影文件资产。所以这可能就是我为每部电影所做的。刚刚意识到什么是简单的解决方案。这样我就不需要为需要旋转的投影分叉我的顶点着色器代码。不需要旋转。

我仍然非常感谢关于属性参数的澄清,如果有人有这方面的信息。