用OpenGL实现红外图像的模拟

wangliang1994 2017-01-06 08:54:47
已知温度场的数据,怎么利用OpenGL得到红外图像呢?也就是温度高的地方和温度低的地方颜色有区别,求大神提供思路~感激涕零
...全文
512 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-09
  • 打赏
  • 举报
回复
“体积材质”(Volumetric Materials)
injuer 2017-01-08
  • 打赏
  • 举报
回复
普通坐标转极坐标,让opengl绘制颜色半径。
副组长 2017-01-08
  • 打赏
  • 举报
回复
引用 3 楼 wangliang1994 的回复:
[quote=引用 1 楼 gordon3000 的回复:] 伪彩色图像就可以,比方温度分成256级,每级对应一种RGB颜色,这不就是查找表(LUT)吗,都是这么做的。 干吗要牵扯OpenGL?
想通过编程得到一幅红外图像,不好意思我不了解LUT,请问这个是最后能得到图片吗?非常感谢![/quote]当然是图像了,去查查256色BMP图像的格式,把你的温度场数据线性拉伸到256级,直接就是图像。 不爱做LUT表也可以使用 RGB 3色,浪费一点存储空间而已。
wangliang1994 2017-01-07
  • 打赏
  • 举报
回复
引用 2 楼 piaobotudou 的回复:
1. 有一个颜色坐标轴 2. 用颜色坐标上的各个颜色生成一个一维纹理 3. 绘制模型的时候根据温度计算各点的纹理坐标,然后用这个一维纹理绘制
非常感谢提供思路,请问您做过类似的例子吗?
wangliang1994 2017-01-07
  • 打赏
  • 举报
回复
引用 1 楼 gordon3000 的回复:
伪彩色图像就可以,比方温度分成256级,每级对应一种RGB颜色,这不就是查找表(LUT)吗,都是这么做的。 干吗要牵扯OpenGL?
想通过编程得到一幅红外图像,不好意思我不了解LUT,请问这个是最后能得到图片吗?非常感谢!
向立天 2017-01-07
  • 打赏
  • 举报
回复
这种需求用opengl是不是有点费事了,GDI就可以实现的
微型蚂蚁 2017-01-07
  • 打赏
  • 举报
回复
1. 有一个颜色坐标轴
2. 用颜色坐标上的各个颜色生成一个一维纹理
3. 绘制模型的时候根据温度计算各点的纹理坐标,然后用这个一维纹理绘制
副组长 2017-01-07
  • 打赏
  • 举报
回复
伪彩色图像就可以,比方温度分成256级,每级对应一种RGB颜色,这不就是查找表(LUT)吗,都是这么做的。 干吗要牵扯OpenGL?
微型蚂蚁 2017-01-07
  • 打赏
  • 举报
回复

#include <GL/glew.h>
#include <GLFW/glfw3.h>

float TransDataValue2TexCoord(float _val)
{
    return _val;
}

int main()
{
    GLFWwindow* window;
    if(!glfwInit())
      return -1;
    window = glfwCreateWindow(640,480, "Hello world",NULL, NULL);
    if(!window)
    {
          glfwTerminate();
    }

    glfwMakeContextCurrent(window);
    glewInit();

    //Axis Colors 0->1
    int axisColorNum = 4;
    unsigned char axisColors[] = {
      255, 0, 0, 255,
      0, 255, 0, 255,
      0, 255, 255, 255,
      0, 0, 255, 255
    };

    //Perpare texture
    GLuint axisTex ;
    glGenTextures(1, &axisTex);
    glBindTexture(GL_TEXTURE_1D, axisTex);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexImage1D(GL_TEXTURE_1D,
        0,
        GL_RGBA,
        axisColorNum,
        0,
        GL_RGBA,
        GL_UNSIGNED_BYTE,
        axisColors);
    glEnable(GL_TEXTURE);
    glEnable(GL_TEXTURE_1D);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

    while(!glfwWindowShouldClose(window))
    {
        //Draw Loop
        glClear(GL_COLOR_BUFFER_BIT);

        glBegin(GL_TRIANGLES);
        glTexCoord1f(TransDataValue2TexCoord(0.0f));
        glVertex3f(-0.2f, -0.2f, 0.0f);
        glTexCoord1f(TransDataValue2TexCoord(0.4f));
        glVertex3f(0.2f, -0.2f, 0.0f);
        glTexCoord1f(TransDataValue2TexCoord(0.9f));
        glVertex3f(0, 0.4f, 0.0f);
        glEnd();
        //Draw Loop Finished

        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glDisable(GL_TEXTURE_1D);
    glDisable(GL_TEXTURE);
    glBindTexture(GL_TEXTURE_1D, 0);
    glDeleteTextures(1, &axisTex);

    glfwTerminate();
    return 0  ;
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧