2010-10-02 99 views
0

我很新的OpenGL的,这是我的目标是什么?绘制一个小的纹理在更大的OpenGL纹理在iPhone上

  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 }, 
}; 

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

回答

1
  1. 画出大纹理到帧缓存,它
  2. 涂料按照您的意愿,小的纹理,
  3. 呼叫glCopyTexImage2D或glCopyTexSubImage2D到绘制的纹理从帧缓冲复制回纹理对象。

上述方法适用于OpenGL 1.1或更高版本。但是它可能不如你想要的那么高效。可能的优化(取决于你的OpenGL版本)是创建一个直接绑定到大纹理并在那里绘制的离屏帧缓冲区。看glGenFramebuffers。

+0

非常感谢回复。虽然我理解这个概念,但我在第2步挣扎着。比如说,我在GL_TEXTURE0中加载了较大的纹理,而在GL_TEXTURE1中加载了较小的纹理。现在我无法使用glVertexPointer(),glVertexPointer(),glTexEnvi()和glDrawArrays()函数的组合在FBO上成功绘制这些纹理。你能解释我如何实现这个? – Abix 2010-10-02 12:24:16

+0

@Pankaj:你为什么试图同时绑定他们两个?你难道没有看到步骤1与步骤2分离吗? – ybungalobill 2010-10-02 12:44:45

+0

嗯,我对OpenGL很陌生,刚开始这个周末。让我多了解一些事情,我会再试一次。 – Abix 2010-10-02 15:48:14

2

其他人可能会从苹果有用找到这个示例: GLPaint

希望它能帮助!