1

在我涉足 OpenGL ES 2.0 的最后一天,在尝试将两个投影纹理(一个精灵动画和一个视频文件纹理)应用到天空盒时,我开始像存根一样简单地敲击键盘,奇迹般地它一切都开始工作了。

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

从 CVImageBufferRef 创建视频文件纹理的函数 CVOpenGLESTextureCacheCreateTextureFromImage() 包括参数“CFDictionaryRef textureAttributes”。

CVOpenGLESTextureCache.h 有助于解释:“包含用于创建 CVOpenGLESTexture 对象的属性的 CFDictionaryRef。可能为 NULL。”

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

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

  1. 传递属性的 CFDictionaryRef 是否可以让我轻松更改有关纹理的内容,例如旋转?或者它在某种程度上意味着着色器意义上的“属性”?(我不认为这很可能意味着着色器感觉,但我也认为将它们称为属性而不是选项很奇怪。)

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

在找到其他方法来翻转它之前,我想对此进行研究,因为如果可以在此处进行操作,那么如果该过程确实与 GLKTextureLoader 的选项平行,这似乎是最直接的方法。

4

1 回答 1

0

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

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

不过,如果有人有这方面的信息,我仍然非常感谢对属性论点的澄清。

于 2012-07-21T00:36:29.597 回答