gpt4 book ai didi

c++ - 具有多个 gl_Position 输出的 OpenGL 多渲染目标

转载 作者:行者123 更新时间:2023-11-28 02:11:54 26 4
gpt4 key购买 nike

我正在寻找可以在不同位置写入缓冲区的 MRT。

例子

缓冲区 0:gl_Position[0] = vec4(uv,0.,1.);gl_FragData[0] = vec4(1.);

缓冲区 1:gl_Position[1] = MVP * 位置;gl_FragData[1] = vec4(0.);

顶点着色器可以有多个输出吗?我找不到任何相关资源..

最佳答案

Is it possible to have multiple output in a vertex shader ?

不,但这并不意味着您无法获得您想要的效果。好吧,你没有详细描述你想要什么,但这已经是 OpenGL 所能提供的最接近的了。

你想要的看起来很像layered rendering . Geometry Shader 能够生成到达不同层的图元。因此,您可以生成一个渲染到一层的三角形,然后生成第二个三角形到另一层。

当然,这提出了一个问题:什么是层?嗯,这与 layered framebuffers 有关.看,如果您将分层图像附加到帧缓冲区(array texturecubemap texture),每个数组层/立方体贴图面代表一个可以渲染到的不同 2D 层。几何着色器可以将每个输出基元发送到分层帧缓冲区中的特定层。因此,如果图像中有 3 个阵列层,则 GS 可以将图元输出到层 0、1 或 2,并且该图元将仅渲染到阵列纹理中的特定图像。

深度缓冲区也可以分层,如果您希望在分层渲染中进行深度测试,您必须使用分层深度缓冲区。图元渲染的所有方面都由它发送到的层控制。因此,当片段着色器运行时,输出将只到达它被渲染到的层。深度测试完成后,该测试的读取将仅从深度缓冲区的该层读取。等等,包括混合。

当然,使用分层帧缓冲区意味着特定图像附件中的所有层都必须来自相同的纹理。因此它们必须具有相同的 Image Format .所以有局限性。但总的来说,它或多或少地完成了您的要求。

关于c++ - 具有多个 gl_Position 输出的 OpenGL 多渲染目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35329193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com