1

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

我的问题是,我可以使用纹理映射的结果作为新纹理(它已经被第一个映射扭曲)与其他多边形映射。我觉得我的解释太糟糕了,请看例子;

原始纹理 映射后

左图是我的贴图,右图是映射到多边形后的贴图(贴图划分为 8 块 8 组顶点。我要做的是使用右侧的映射结果作为新的贴图。

可以使用 OpenGL 或 OpenCV 吗?

4

2 回答 2

2

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

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

例子 :

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

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

//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];
于 2013-01-31T16:24:35.193 回答
2

将您的场景渲染到带有纹理附件的 FBO,然后使用该纹理渲染更多几何图形

于 2013-01-23T04:28:10.377 回答