OpenGL将原始图像转换为红色通道

时间:2014-08-22 14:52:49

标签: c++ visual-studio-2010 opengl

我使用的当前IDE是visual studio 2010。 看到很多线程使用不同的SDL命令来转换图像 但无法准确地将图像的每个像素转换为红色通道/蓝色通道/绿色通道

只是尝试只显示红色通道。不可能吗?

我已经做了大约150行的代码来显示图像(参考:wiki和stackoverflow)

链接:http://codepad.org/oTA9RkV7

任何人都可以教导并提供一些样品以仅显示红色通道吗?

1 个答案:

答案 0 :(得分:0)

你在问什么以及你的代码实际上在做什么是两件截然不同的事情。您可以使用SDL来设置openGL上下文,但是您实际上并没有在代码中执行此操作或使用任何openGL api调用来执行任何操作,您只使用SDL函数。

如果您希望以RGB格式将图像blit到屏幕上,如果您不必自己转换图像,我会感到惊讶。即在blitting图像之前,将绿色和蓝色通道设置为0。更熟悉SDL的人将能够更好地回答这个问题。

但是,如果您希望使用openGL,则更容易实现您要求的确切功能,但这不是您应该在openGL中尝试的第一件事,我建议将this tutorial作为学习的起点OpenGL的。在下面的描述中,我假设您使用的是支持着色器的openGL版本。 (即GL 2 +)。

在单独绘制每个频道之前,您需要管理以下内容:

  1. 使用glDrawArraysglDrawElements
  2. 在屏幕上绘制一个矩形
  3. 使用glTexImage2D加载纹理并将其显示在矩形上。
  4. 现在,您可以使用以下行中的片段/像素着色器仅显示红色通道。

    #version 110
    uniform sampler2D texture;
    varying vec2 texcoord;
    
    void main()
    {
        gl_FragColor = vec4(texture2D(texture, texcoord).x, 0.0f, 0.0f, 1.0f);
    }