2012-05-06 62 views
0

我試圖從相機的視頻中繪製一些OpenGL圖形。 我修改了Apple的GLCameraRipple示例,其中繪製了幾個帶紋理三角形的代碼。這段代碼在我的另一個OpenGL項目中運行良好(但沒有GLKit)。 不幸的是,它只能以這種方式工作:當我的應用程序啓動時,我看到屏幕上充滿了ClearColor,並在其上顯示了帶紋理的三角形(但沒有視頻),並且屏幕變成黑色,而我什麼都看不到。 你能解釋我有什麼問題嗎?iOS:使用OpenGL繪製視頻

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect 
{ 

glClearColor(0.5, 0.0, 0.0, 0.3); 
glClear(GL_COLOR_BUFFER_BIT); 

glUseProgram(_program); 

glUniform1i(uniforms[UNIFORM_Y], 0); 
glUniform1i(uniforms[UNIFORM_UV], 1); 


if (_ripple) 
{ 
    glDrawElements(GL_TRIANGLE_STRIP, [_ripple getIndexCount], GL_UNSIGNED_SHORT, 0); 
} 

[self drawAnimations]; 

} 


- (void) drawAnimations{ 

// Use shader program. 
glUseProgram(_texturingProgram); 

GLfloat modelviewProj[16]; 
[self MakeMatrix:modelviewProj 
     OriginX:100.0 
     OriginY:100.0 
      Width:200.0 
      Height:200.0 
     Rotation:0.0]; 

// update uniform values 
glUniformMatrix4fv(texturing_uniforms[TEXTURING_UNIFORM_MODEL_VIEW_PROJECTION_MATRIX], 1, GL_FALSE, modelviewProj); 

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, _animationTexture); 
glUniform1i(texturing_uniforms[TEXTURING_UNIFORM_TEXTURE], 0); 


glVertexAttribPointer(TEXTURING_ATTRIB_VERTEX,3, GL_FLOAT, GL_FALSE, sizeof(vertexDataTextured), &plain[0].vertex); 
glEnableVertexAttribArray(TEXTURING_ATTRIB_VERTEX); 

glVertexAttribPointer(TEXTURING_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, sizeof(vertexDataTextured), &plain[0].texCoord); 
glEnableVertexAttribArray(TEXTURING_ATTRIB_TEX_COORDS); 

glDrawArrays(GL_TRIANGLES, 0, 6); 

if (![self validateProgram:_texturingProgram]) { 

    NSLog(@"Failed to validate program: (%d)", _texturingProgram); 
} 
} 

回答

0

您可以將包含OpenGL繪圖圖層的透明UIView放置在包含相機預覽圖像圖層的另一個UIView上。

+0

嗯,我不確定這是對我而言最好的方法。它會變慢,需要更多的內存,我將無法使用相同的緩衝區 – Seify