首页 > 解决方案 > 如何在 OpenGL 片段着色器中修改采样纹理的颜色值

问题描述

我尝试使用 OpenGL 创建简单的计算机断层扫描查看器,数据是表示单个切片的一维浮点数组。

glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,  width, height, 0, GL_LUMINANCE, GL_FLOAT, data);

问题

如何为窗口目的修改片段着色器中的颜色/浮点值因此将某个阈值以上的所有值显示为白色,将所有值显示为黑色,其余的显示为灰色

我的片段着色器

out vec4 FragColor;
  
in vec3 ourColor;
in vec2 TexCoord;

uniform sampler2D ourTexture;

void main()
{
    FragColor = texture(ourTexture, TexCoord);
}

一切正常,但我有一些问题

我现在得到的图像仅供参考

标签: opengldesktop-applicationtomography-reconstruction

解决方案


只需将阈值与线性插值相结合,如下所示:

out vec4 FragColor;
  
in vec3 ourColor;
in vec2 TexCoord;

uniform sampler2D ourTexture;

void main()
    {
    vec4 col=texture(ourTexture, TexCoord);   // input color
    float t0=0.25,t1=0.75;                    // thresholds
    float t=length(col.rgb)/1.73205081;       // /sqrt(3) ... parameter is intensity of color
    t=(t-t0)/(t1-t0);                         // dynamic range <t0,t1> -> <0,1>
    t=max(t,0.0);                             // cut off unused range
    t=min(t,1.0);
    FragColor = vec4(t,t,t,col.a);
    }

请注意,我没有测试它,因为我直接在答案编辑器中编写了它,因此可能存在一些隐藏的拼写错误,并且懒得从头开始创建 MCVE ......


推荐阅读