【问题标题】:Flipping OpenGL ES Texture Obtained Through CVOpenGLESTexture翻转通过CVOpenGLESTexture获取的OpenGL ES纹理
【发布时间】:2012-07-21 08:39:18
【问题描述】:

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

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

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

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

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

所以,我对两点有点困惑:

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

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

我想先研究一下,然后再找到其他方法来翻转它,因为如果可以在这里做的话,这似乎是最直接的方法,如果该过程确实与 GLKTextureLoader 的选项平行。

【问题讨论】:

    标签: ios opengl-es-2.0


    【解决方案1】:

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

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

    如果有人知道这方面的信息,我仍然非常感谢您对属性参数进行澄清。

    【讨论】:

    • 关于属性,我从来没有将它们用作NULL以外的任何东西。如果您查看标题顶部附近,您会看到// textureAttributes - reserved for future use 。不记得他们是否为 iOS 6.0 添加了任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多