所以,我有一个用openGL制作的对象的集合。他们每个人都有自己的颜色,其中一些有适用于他们的纹理。我想做的是阻止某些颜色到达屏幕,但仍然能够改变它。有什么方法可以选择哪些颜色可以被涂上吗?
我试过在镜头前放一个半透明的飞机,但是它并不能阻止其他颜色的穿过--相反,它只是和它们混合在一起。
理想情况下,这就是它的工作方式:
红色对象+红色屏幕=红色对象 蓝色物体+红色屏幕=灰色/黑色/白色物体 紫色物体+红色屏幕=红色物体
-编辑-
为了澄清我要做的事情:我想让我的所有对象的RGB值保持不变。但是,在将它们绘制到屏幕上之前,我希望在不对对象进行任何实际更改的情况下对一些颜色值进行“零”。
因此,具有RGB 255、150、200通过红色过滤器的对象将被绘制为具有RGB值255、0、0、绿色过滤器0、150、0和蓝色过滤器0,200。
发布于 2012-11-30 03:12:01
我认为最好用碎片着色器来处理。如果“过滤器”是一个常量值,则可以将其设置为统一值,例如,
uniform vec3 filter_rgb;
in vec3 src_rgb;
out vec4 dst_rgba;
void main (void)
{
dst_rgba = vec4(min(filter_rgb, src_rgb), 1.0);
}
因此,如果将任何过滤器组件设置为零,则相应的输出组件也将为零。根据您想要的行为,clamp
函数可能是一个比min
函数更有用的内置选择。
https://stackoverflow.com/questions/13637377
复制相似问题