Mik*_*ail 1 c++ opengl opengl-3
我想知道是否有办法处理OpenGL纹理缓冲区,以便通过我选择的某个公式将灰度值缓冲区转换为rgb值.
我已经有一个功能,它运作良好但输出颜色3矢量.
rgb convertToColor(float value);
Run Code Online (Sandbox Code Playgroud)
我是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);
//...
Run Code Online (Sandbox Code Playgroud)
着色器
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";
Run Code Online (Sandbox Code Playgroud)
我试图在matlab中重新创建像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";
Run Code Online (Sandbox Code Playgroud)
其中映射纹理是将灰度映射到颜色的1D文本.
当然,你也可以编写基于灰度计算rgb颜色的函数,但是(取决于你的硬件),进行纹理查找可能会更快.
目前尚不清楚如何将两个缓冲区一次绑定到OpenGL程序