我和Vuforia一起做了一个项目。我使用VideoPlayback样本来自Vuforia。
当Vuforia检测到一个标记时,视频播放在这个标记上作为覆盖。我尝试应用在视频覆盖上的铬质。我发现这篇文章是http://pilcrowpipe.blogspot.fr/2013/03/chroma-keying-transparent-background.html
我试着实现代码,但没有任何效果。我认为这个例子使用了视频背景的颜色,但我想要铬的叠加视频。我说得对吗?
在Vuforia示例中,我认为我必须在renderFrameWithState函数中更改一些内容。
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的菜鸟。
有人能帮我吗?
谢谢
发布于 2017-02-02 08:59:25
经过搜索,我找到了解决办法!
在VideoPlaybackEAGL.mm,中,我将这段代码添加到renderFrameWithState函数中。
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轴。
发布于 2017-09-25 02:32:35
最后一个
glEnable(GL_BLEND);应:
glDisable(GL_BLEND);为了不冻结背景。
谢谢你的密码!
https://stackoverflow.com/questions/41982907
复制相似问题