我可以使用纹理映射结果作为新的纹理数据吗?

时间:2013-01-23 03:31:56

标签: opengl glfw

我使用OpenGL和“GLFW”将纹理图像映射到2D多边形,这是从OpenCV生成的顶点集。

我的问题是,我可以将纹理映射的结果用作新纹理(已经被第一个映射扭曲)以与其他多边形进行映射。 我认为我的解释非常糟糕,请看一下这个例子;

Original Texture After mapping

左图是我的纹理,右边是映射到多边形后的纹理(纹理被划分为8个块的8个块。我想要做的是使用右侧的映射结果作为新纹理

可以使用OpenGL或OpenCV吗?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

你需要2个FBO和2个纹理。

将场景渲染到第一个FBO(fbo1)并将纹理(texture1)发送到着色器,然后将场景渲染到第二个FBO(fbo2)。之后,您将seconde纹理(texture2)发送到着色器并在主FBO中渲染场景(以显示场景)或在第一个FBO中渲染(以进行另一次传递)。

示例:

1)在FBO1中渲染场景 2)将纹理1发送到着色器 3)渲染FBO2中修改的纹理1 4)将纹理2发送到着色器 5)在FBO1中渲染纹理2修改器 6)将纹理1发送到着色器 等等...

这是我的一个项目的一个小代码,用于描述我试图解释的内容(使模糊)。

//render the scene to the fbo1
glBindFramebuffer(GL_FRAMEBUFFER, f1);
glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_programRTT];

//apply horizontal blur the result go in the fbo2
glBindFramebuffer(GL_FRAMEBUFFER, f2);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, t1);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_programBH];

//apply vertical blur the result go in the fbo1
glBindFramebuffer(GL_FRAMEBUFFER, f1);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, t2);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_programBV];

//return to the main fbo and display result on screen
[view bindDrawable];
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, t1);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self drawWithShader:_program];