首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制一个3d渲染图像(透视proj)回到另一个视图与正交proj。同时使用多个视图和OpenGL

如何绘制一个3d渲染图像(透视proj)回到另一个视图与正交proj。同时使用多个视图和OpenGL
EN

Stack Overflow用户
提问于 2013-12-16 03:28:15
回答 1查看 295关注 0票数 0

我的问题是,我想要拍摄一种3d场景的快照,操纵这个快照,然后把它拉回另一个场景的视口,

我只是使用glReadPixel方法读取图像。现在,我想将该图像撤回到指定的视口,但使用现代OpenGL。

我读到了FrameBufferObject和PixelBufferObject,以及将FrameBufferObject内容写回gl2DTexture并将其作为简单纹理传递给FragementShader的解决方案。

这种方法是正确的,还是任何人都可以提供一个简单的示例,说明如何使用现代OpenGL而不是不推荐的glDrawPixel方法将图像呈现回场景?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-16 04:11:21

您想要做的整个过程如下所示

  1. 创建一个带有颜色和深度附件的FBO。绑起来。
  2. 渲染你的场景
  3. 将其颜色附件中的内容复制到客户端内存,以便对其执行您想要的操作。
  4. 将图像复制回OpenGL纹理(也可以保留相同的纹理)。
  5. 绑定默认框架缓冲区(0)
  6. 使用您的图像作为纹理映射呈现一个全屏四角体。(可能使用不同的着色器或切换着色器功能)。

你可能会有以下问题:

  • ,我必须呈现全屏四角体吗?是的。你不能绕过顶点着色器。所以在某个地方,只要用VBO中的纹理坐标做四个顶点,yada yada就可以了。
  • 我的顶点着色器处理投影的事情,我如何处理这个四边形?你可以创建一个子程序来切换你如何处理你的顶点着色器的顶点。一个可以用于常规的3D渲染(即从模型空间转换到世界/视图/屏幕空间),也可以是一个不经修改就沿着顶点发送出去的通道。你只需要你的顶点在(-1,-1)到(1,1)的正方形的四个角落。把这些送到你的碎片着色器,它会做你想做的事。如果您不想使用子程序,则可以选择将所有矩阵设置为标识。

*如果您能找到一种在着色器中进行纹理操作的方法,我强烈建议您这样做。GPU确实是为此而构建的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20602982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档