2010-07-13 208 views
2

我可以舒适地将场景渲染到纹理,并将纹理映射回帧缓冲以进行屏幕显示。但是如果我想将纹理映射到自身以便模糊它(例如,在新位置的四分之一不透明度处),该怎么办。那可能吗?在OpenGL ES中渲染纹理

我做它的方式就是启用质地:

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, color_tex); 

,然后绘制它:

glVertexPointer(2, GL_FLOAT, 0, sv); 
glTexCoordPointer(2, GL_FLOAT, 0, tcb1); 
glColor4f (1.0f,1.0f,1.0f,0.25f); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

(一些代码省略,很明显)

是那个想法有什么明显的错误?我是个白痴吗?

+0

你想使用FBO将纹理渲染到相同的纹理,但有一些处理? – 2010-07-13 16:23:20

+0

本质上。再次将纹理分层,然后进行不透明度更改。 我想我可能需要将纹理写入另一个FBO,然后将其复制回来。是对的吗? – mtrc 2010-07-13 16:28:51

+0

如果您使用的是iOS 6.0或更新的版本,则可以访问gl_LastFragData变量以读取新片段着色器通道中先前渲染的状态。它是basicalyl的“乒乓球”,但不改变2 diff渲染纹理目标。 – MoDJ 2014-05-18 19:29:08

回答

5

不,您不能将纹理写入相同的纹理,触发未定义的行为。

但是,您可以使用称为乒乓渲染的技术,以便将操作的结果绘制到另一个纹理中,并且如果需要执行更多处理,则会将结果写入第一个纹理。

+0

你是绝对的明星。感谢您再次帮忙。 – mtrc 2010-07-14 08:01:29