在iPhone上的较大OpenGL纹理上绘制较小的纹理

时间:2010-10-02 06:54:29

标签: iphone xcode opengl-es textures

我是OpenGL的新手,这就是我的目标......

  1. 从图像加载纹理。
  2. 加载另一个比第一个小得多的纹理。
  3. 现在继续在较大的一个事件链上绘制较小的纹理,比如在较大的纹理上绘画。
  4. 有人可以向我指出一些可能有助于实现这一目标的材料吗?

    我查了一些书,但他们大多是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 },
    };
    

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

2 个答案:

答案 0 :(得分:2)

其他人可能会发现Apple的这个样本很有用: GLPaint

希望它有所帮助!

答案 1 :(得分:1)

  1. 将大纹理绘制到帧缓冲区中,
  2. 根据需要使用小纹理在其上绘画,
  3. 调用glCopyTexImage2D或glCopyTexSubImage2D将绘制的纹理从帧缓冲区复制回纹理对象。
  4. 上述方法适用于OpenGL 1.1或更高版本。但是它可能没有您想要的那么高效。可能的优化(取决于你的OpenGL版本)是创建一个屏幕外的帧缓冲区,直接绑定到大纹理并在那里绘制。请参阅glGenFramebuffers。