首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vuforia ChromaKey在视频叠加中的应用

Vuforia ChromaKey在视频叠加中的应用
EN

Stack Overflow用户
提问于 2017-02-01 15:00:18
回答 2查看 413关注 0票数 0

我和Vuforia一起做了一个项目。我使用VideoPlayback样本来自Vuforia

当Vuforia检测到一个标记时,视频播放在这个标记上作为覆盖。我尝试应用在视频覆盖上的铬质。我发现这篇文章是http://pilcrowpipe.blogspot.fr/2013/03/chroma-keying-transparent-background.html

我试着实现代码,但没有任何效果。我认为这个例子使用了视频背景的颜色,但我想要铬的叠加视频。我说得对吗?

在Vuforia示例中,我认为我必须在renderFrameWithState函数中更改一些内容。

代码语言:javascript
复制
if (NOT_READY != currentStatus) {
        // Convert trackable pose to matrix for use with OpenGL
        // ...

        /// TEST doesn't work
        //glDepthFunc(GL_LEQUAL);
        //glEnable(GL_BLEND);
        //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        ///

        // ...

        glUseProgram(shaderProgramID);

        glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, quadVertices);
        glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, quadNormals);
        glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, texCoords);

        glEnableVertexAttribArray(vertexHandle);
        glEnableVertexAttribArray(normalHandle);
        glEnableVertexAttribArray(textureCoordHandle);

        // I think I must change something in code above...
        // But what and where ????
        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_2D, frameTextureID);
        glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (GLfloat*)&modelViewProjectionVideo.data[0]);
        glUniform1i(texSampler2DHandle, 0 /*GL_TEXTURE0*/);
        glDrawElements(GL_TRIANGLES, kNumQuadIndices, GL_UNSIGNED_SHORT, quadIndices);

        glDisableVertexAttribArray(vertexHandle);
        glDisableVertexAttribArray(normalHandle);
        glDisableVertexAttribArray(textureCoordHandle);

        glUseProgram(0);
    }

我完全是OpenGL ES的菜鸟。

有人能帮我吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-02-02 08:59:25

经过搜索,我找到了解决办法!

VideoPlaybackEAGL.mm,中,我将这段代码添加到renderFrameWithState函数中。

代码语言:javascript
复制
if (NOT_READY != currentStatus) {
    // Convert trackable pose to matrix for use with OpenGL
    // ...

    /// It's work
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    ///

    // ...

    glUseProgram(shaderProgramID);

    glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, quadVertices);
    glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, quadNormals);
    glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, texCoords);

    glEnableVertexAttribArray(vertexHandle);
    glEnableVertexAttribArray(normalHandle);
    glEnableVertexAttribArray(textureCoordHandle);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, frameTextureID);
    glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (GLfloat*)&modelViewProjectionVideo.data[0]);
    glUniform1i(texSampler2DHandle, 0 /*GL_TEXTURE0*/);
    glDrawElements(GL_TRIANGLES, kNumQuadIndices, GL_UNSIGNED_SHORT, quadIndices);

    glDisableVertexAttribArray(vertexHandle);
    glDisableVertexAttribArray(normalHandle);
    glDisableVertexAttribArray(textureCoordHandle);

    glUseProgram(0);

    // Adding code above to resolve the problem...
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_BLEND);
}

这是工作!我改变一点顶点着色器,以纠正z轴。

票数 0
EN

Stack Overflow用户

发布于 2017-09-25 02:32:35

最后一个

代码语言:javascript
复制
glEnable(GL_BLEND);

应:

代码语言:javascript
复制
glDisable(GL_BLEND);

为了不冻结背景。

谢谢你的密码!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41982907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档