我使用OpenGL和“GLFW”将纹理图像映射到2D多边形,这是从OpenCV生成的顶点集。
我的问题是,我可以将纹理映射的结果用作新纹理(已经被第一个映射扭曲)以与其他多边形进行映射。 我认为我的解释非常糟糕,请看一下这个例子;
左图是我的纹理,右边是映射到多边形后的纹理(纹理被划分为8个块的8个块。我想要做的是使用右侧的映射结果作为新纹理
可以使用OpenGL或OpenCV吗?
答案 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];