opengl - 如何在 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);
}
一切正常,但我有一些问题
解决方案
只需将阈值与线性插值相结合,如下所示:
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 ......
推荐阅读
- php - 如何在 PHP 条件语句中定义 HTML 类
- angular - 翻译路线的最佳方式
- python - 如何按单词将 txt 文件拆分为列表,但在元素上包含逗号
- php - php正则表达式名称不能超过50个字母怎么办?
- x11 - 如何使用 xdotool 自动化实用程序键入“+”号?
- php - 使用 mpdf 生成多个 pdf 文件,但只生成一个
- python - 重塑DataFrame时出现ValueError
- php - 在 Docker 中部署时无法连接到数据库
- javascript - 切换到 JQuery 后从 PHP 到 JS 的响应不起作用
- reactjs - 接受任何类型的 React 组件作为道具的 Typescript 类型是什么?