【问题标题】:opengl shader make color "disappear"opengl着色器使颜色“消失”
【发布时间】:2011-04-09 08:21:12
【问题描述】:

我是 opengl 和着色器的新手。我正在尝试在 iphone 上做一些增强现实,并使用着色器来更改来自相机的提要。

我想要实现的是通过将颜色设置为与周围颜色相匹配来使图片中的对象消失的外观。我有一个黄色矩形,里面是一个红色的小圆圈。我想通过将颜色设置为黄色来给红色圆圈消失的印象。

它并不总是纯色,但我只是想先了解基础知识。

目前我有一个简单的着色器,可以使红色变浅,但这并不理想,因为它不会接近周围的颜色,我希望它适用于不同颜色的对象和不同颜色的周围环境。

我什至不是 100% 着色器是我需要查看的,甚至不是 opengl。我使用它是因为它在 iPhone 上提供的性能。

我基本上是在问:

  1. 任何人都做过或见过类似的事情
  2. 我是不是用 opengl es 和 opengl sl 找错树了?
  3. 这可能吗?

干杯。

【问题讨论】:

    标签: iphone opengl-es augmented-reality


    【解决方案1】:

    您听说过 Alpha 混合吗? 颜色有 4 个通道。红色、绿色、蓝色和 alpha (rgba)。 Alpha 通道决定透明度。您可以将其设置为 0(完全透明/不可见)或 1(完全实心)之间的任何值。

    要使您的对象不可见,只需将 alpha 设置为 0! 例如在您的片段着色器中:

    gl_FragColor.a = 0;
    

    您可以在不使用着色器的情况下通过更改程序中的 Alpha 值来实现此目的。 例如:

    glColor4f(1.0, 0.0, 0.0, 0.5); //Draws something red with half transparency (hence the 0.5)
    glVertex3f(...);
    glVertex3f(...);
    glVertex3f(...);
    

    只要确保你启用了 alpha 混合:

    glEnable (GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    

    【讨论】:

    • 我无法访问对象来设置其透明度,因为图像来自 iPhone 的视频源,所以我认为这种方法行不通,还是我弄错了?
    • 它是一个 API 调用来渲染来自相机源的图像,还是你绘制的纹理?是您需要使图像本身透明还是您在顶部绘制的对象?
    • 它的图像本身,我没有在顶部绘制任何对象。经过一番谷歌搜索后,我发现了这个:kurzweilai.net/… - 这就是我想要实现的目标。这是一个渲染图像的api调用
    • 这改变了一切。这超出了 OpenGL 使用的正常渲染技术的范围。这种东西需要先进的图像处理。诚然,可以使用 OpenGL 着色器来加速这个过程,但这个过程本身就是一个复杂的过程。
    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2014-06-03
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多