在现代OpenGL中,如何避免使用无效片段覆盖FBO颜色附件中的数据?

斯蒂芬·鲍尔

我有一个批处理渲染管线,可将一堆四边形上载到OpenGL。将这些呈现给FBO。自然,附件中的一个是视觉输出,另一个是深度,允许进行后期处理等。但是,第三个附件旨在以与此处说明类似的方式存储要拾取的对象ID

有一个小问题。我希望某些渲染的项目对拾取是“透明的”。从本质上讲,某些东西(颗粒或视觉装饰或其他东西)本身是不可拾取的,但不应阻止对其后面物体的拾取。

如何实现?网络搜索表明这glAlphaFunc可能曾经扮演过这个角色,因为我可以将对象id打包到带有透明通道的纹理中,然后删除将我的透明度设置为0的所有片段。但是,这已经贬值了。

针对类似问题的另一个常见建议是使用discard关键字。这是行不通的,因为它会删除片段的所有输出元素,而不仅仅是删除指定的附件。

这里有什么解决方案?我可以用看不见的混合功能做些聪明的事情吗?我很糊涂。


片段着色器看起来像这样:

#region Fragment

#version 440 core

layout(location = 0) out vec4 colour; // Visual
layout(location = 1) out uint interactLayer; // Picking

in vec2 texCoord;
in flat int texUnit;
in flat uint objectID;

uniform sampler2D[32] u_texData;

void main()
{
    vec4 c1 = fragmentColour * texture(u_texData[texUnit], texCoord);
    
    if (c1.w == 0.0f) { discard; }
    colour = c1;
    
    if (objectID == 0xffffffffu) {
        // Please don't write to interactLayer values,
        // but also please don't discard the 'colour' value.
    }
    else {
        interactLayer = objectID;
    }
}
尼科尔·波拉斯(Nicol Bolas)

丢弃片段是二进制的。它要么被丢弃(连同所有结果),要么被接受。

您也不能混合为非标准化的整数图像格式。混合仅在浮点类型(包括标准化整数)之间起作用。

最好的选择是对索引使用浮动图像格式。将整数转换为着色器,然后使用混合将其打开/关闭。这将需要vec4在着色器中编写一个,以便您可以编写适当的alpha值。请注意,仅仅因为您正在编写a vec4,并不意味着图像格式必须包含4个组成部分;它仍然可以具有1个组件,并且混合应该可以工作(只要您仅使用源Alpha)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更改不同片段中的文本颜色

来自分类Dev

如何使用GLSL在现代OpenGL中渲染文本

来自分类Dev

使用lwjgl在现代OpenGL中绘制纹理

来自分类Dev

避免使用插件编程在Outlook中删除附件

来自分类Dev

如何避免在python中覆盖文件?

来自分类Dev

当我在OpenGL ES 2.0中更改颜色或坐标时,如何避免每次都创建新的floatBuffer?

来自分类Dev

在现代OpenGL中渲染大圆形点

来自分类Dev

如何在现代OpenGL中渲染多个纹理?

来自分类Dev

如何使用导航抽屉避免android中的片段重叠

来自分类Dev

如何使用swipeRefreshLayout更新片段中的新json数据

来自分类Dev

如何避免使用python覆盖Excel中的单元格?

来自分类Dev

如何在OpenGL中反转纹理颜色

来自分类Dev

从OpenGL中的默认帧缓冲区读取像素数据:FBO与PBO的性能

来自分类Dev

如何避免覆盖Firebase中的数据

来自分类Dev

如何避免在Laravel中覆盖路由?

来自分类Dev

如何避免std库中的无效重载?

来自分类Dev

如何观察片段中的数据

来自分类Dev

如何避免使用for循环将列表中的数据覆盖到字典中?

来自分类Dev

如何使用附件提取器在Thunderbird中批量删除附件?

来自分类Dev

OpenGL中的FBO包含错误

来自分类Dev

避免使用插件编程在Outlook中删除附件

来自分类Dev

如何避免在python中覆盖文件?

来自分类Dev

如何不使用OpenGL中的着色器覆盖顶点颜色?

来自分类Dev

如何检索FBO附件的数量

来自分类Dev

如何覆盖CSS中定义的颜色?

来自分类Dev

使用现代 C++ 从文件中读取 - 不存储数据

来自分类Dev

OpenGL ES 3.0 中的多重采样 FBO

来自分类Dev

如何避免在 tkinter 中覆盖复选按钮

来自分类Dev

附件中的图片无效

Related 相关文章

热门标签

归档