在我进入OpenGL ES 2.0的过去一天,在尝试将两个投影纹理(一个精灵动画和一个视频文件纹理)应用到天空盒时,我开始只是像键盘一样敲击键盘上的手,奇迹般地,一切都开始起作用了。
但是,从视频文件创建的纹理会颠倒翻转。换句话说,(0,0)的纹理坐标似乎映射到(0,1),反之亦然。
从CVImageBufferRef创建视频文件纹理的函数CVOpenGLESTextureCacheCreateTextureFromImage()包含一个参数" CFDictionaryRef textureAttributes。"
CVOpenGLESTextureCache.h有用地解释:"包含用于创建CVOpenGLESTexture对象的属性的CFDictionaryRef。可能是NULL。"
我立刻想到了GLKTextureLoader,它允许你传入一个选项字典,其中一个可用选项用于翻转纹理。
所以,我在两点上有点困惑:
传入属性的CFDictionaryRef会让我轻松改变纹理的内容,比如旋转吗?或者它是否意味着'属性'在着色器中? (我不认为它很可能意味着着色器感,但我也认为将它们称为属性而不是选项是奇怪的。)
是否有一个键/值对的某个列表会告诉它做有用的事情?
我想在找到其他方法进行翻转之前先研究一下,因为如果它可以在这里进行,那么它似乎是最简单的方法,如果程序确实平行于GLKTextureLoader的选项。
答案 0 :(得分:0)
在再次阅读了Apple的RosyWriter示例代码后,我意识到在使用CVOpenGLESTextureCacheCreateTextureFromImage()创建纹理后,他们通过修改顶点的纹理坐标来翻转纹理。
由于我在顶点着色器中投影纹理和计算纹理坐标,我认为对我来说最简单的解决方案是在将其放入xcode之前翻转实际的电影文件资产。所以这可能就是我为每部电影所做的。刚刚意识到什么是简单的解决方案。这样我就不需要为需要旋转的投影分叉我的顶点着色器代码。不需要旋转。
我仍然非常感谢关于属性参数的澄清,如果有人有这方面的信息。