【问题标题】:Drawing a smaller texture on a larger OpenGL texture on iPhone在 iPhone 上较大的 OpenGL 纹理上绘制较小的纹理
【发布时间】:2011-04-20 04:06:54
【问题描述】:

我对 OpenGL 很陌生,这就是我的目标......

  1. 从图像加载纹理。
  2. 加载另一个比第一个小得多的纹理。
  3. 现在继续在某些事件链上在较大的纹理上绘制较小的纹理,例如在较大的纹理上绘画。

有人可以指点我一些可能有助于做到这一点的材料吗?

我看过一些书,但它们主要是关于 3D 动画之类的东西,我不想去那个部门,我只需要 2D 中的纹理操作。

我正在学习这个例子......

http://developer.apple.com/library/ios/#samplecode/GLImageProcessing/index.html

对于我的实验,我正在修改示例中的 drawGL() 函数来执行此操作...

第一次调用 drawGL() 时,没有任何变化,因此在视图上绘制了完整的纹理。

在接下来的绘制中,我将 Flipquad 数组更改为...

V2fT2f flipquad[4] = {
 { 0, .5, 0, .5 },
 { .5, .5, .5, .5 },
 { 0, 1, 0, 0 },
 { .5, 1, .5, 0 },
};

只修改左上象限。这在模拟器上运行良好,但是当我在设备上运行它时,除了左上象限之外的其余视图闪烁,即每次交替绘制都会使其变黑!

【问题讨论】:

    标签: iphone xcode opengl-es textures


    【解决方案1】:

    其他人可能会发现这个来自 Apple 的示例很有用: GLPaint

    希望对你有帮助!

    【讨论】:

      【解决方案2】:
      1. 将大纹理绘制到帧缓冲区中,
      2. 随心所欲地涂上小纹理,
      3. 调用 glCopyTexImage2D 或 glCopyTexSubImage2D 将绘制的纹理从帧缓冲区复制回纹理对象。

      上述方法适用于 OpenGL 1.1 或更高版本。但是,它可能没有您想要的那么有效。可能的优化(取决于您的 OpenGL 版本)是创建一个直接绑定到大纹理的屏幕外帧缓冲区并在那里绘制。请参阅 glGenFramebuffers。

      【讨论】:

      • 非常感谢您的回复。虽然我理解了这个概念,但我在第 2 步上苦苦挣扎。比如说,我在 GL_TEXTURE0 中加载大纹理,在 GL_TEXTURE1 中加载较小的纹理。现在我无法使用 glVertexPointer()、glVertexPointer()、glTexEnvi() 和 glDrawArrays() 函数的组合在 FBO 上成功地绘制这些纹理。你能解释一下我是怎么做到的吗?
      • @Pankaj:你为什么要同时绑定它们?你没看到第一步和第二步是分开的吗?
      • 嗯,我是 OpenGL 的新手,刚开始这个周末。让我对事情有更多的了解,我会再试一次。
      • 最后它似乎可以正常工作并且没有 glCopyTexImage2D,按照您的建议使用屏幕外帧缓冲区。感谢您的回复。
      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多