gpt4 book ai didi

c++ - OpenGL亮度到颜色映射?

转载 作者:行者123 更新时间:2023-11-30 00:36:04 24 4
gpt4 key购买 nike

我想知道是否有一种方法可以处理 OpenGL 纹理缓冲区,以便通过我选择的一些公式将灰度值缓冲区动态转换为 rgb 值。

我已经有一个类似的函数,它运行良好但输出一个颜色 3 vector 。

rgb convertToColor(float value);

我是 OpenGL 的新手,想知道我应该使用哪种着色器以及它应该去哪里。我的程序目前这样循环帧:

program1.bind();
program1.setUniformValue("texture", 0);
program1.enableAttributeArray(vertexAttr1);
program1.enableAttributeArray(vertexTexr1);
program1.setAttributeArray(vertexAttr1, vertices.constData());
program1.setAttributeArray(vertexTexr1, texCoords.constData());
glBindTexture(GL_TEXTURE_2D, textures[0]);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,widthGL,heightGL, GL_LUMINANCE,GL_UNSIGNED_BYTE, &displayBuff[displayStart]);
glDrawArrays(GL_TRIANGLES, 0, vertices.size());
glBindTexture(GL_TEXTURE_2D,0);
//...

着色器

QGLShader *fshader1 = new QGLShader(QGLShader::Fragment, this);
const char *fsrc1 =
"uniform sampler2D texture;\n"
"varying mediump vec4 texc;\n"
"void main(void)\n"
"{\n"
" gl_FragColor = texture2D(texture, texc.st);\n"
"}\n";

我正在尝试在 matlab 中像 imagesc 一样重新创建效果,如下图所示: imagesc

最佳答案

像这样的东西会起作用:

    "uniform sampler2D texture;\n"
"uniform sampler1D mappingTexture;\n"
"varying mediump vec4 texc;\n"
"void main(void)\n"
"{\n"
" gl_FragColor = texture1D(mappingTexture, texture2D(texture, texc.st).s);\n"
"}\n";

其中映射纹理是将灰度映射到颜色的一维纹理。

当然,您也可以编写基于灰度计算 rgb 颜色的函数,但是(取决于您的硬件)仅进行纹理查找可能会更快。

it is not clear how to bind two buffers to an OpenGL program at once

Binding textures to samplers.

关于c++ - OpenGL亮度到颜色映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099964/

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