我嘗試使用「模板緩衝區」來顯示紋理中的一部分渲染,但是我的渲染沒有任何遮罩效果。在iOS中使用模板緩衝區
這是一個2D的iOS項目,OpenGL ES 2.0的 這是我的代碼的相關部分:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glEnable(GL_STENCIL_TEST);
// mask rendering
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, _maskTexture);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// scene rendering
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glBindTexture(GL_TEXTURE_2D, _viewTexture);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
任何幫助將不勝感激!
(像往常一樣爲法國開發商,對不起我的英語!)
精度:「_maskTexture」是一個黑色&白畫面。
解決方法:
我finnaly解決我的問題與rotoglub和恬的跡象。 謝謝你們兩位。
1 /模板緩衝區尚未正確創建。 應該初始化是這樣的:
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthStencilRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES,
GL_DEPTH24_STENCIL8_OES,
backingWidth,
backingHeight);
這是主要的原因,我的渲染並沒有受到我的面具。
2 /爲了能夠使用紋理作爲蒙版,我用alpha通道替換了黑色,並在渲染中啓用了混合。
我的最終渲染代碼如下所示:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glClearStencil(0);
glClearColor (0.0,0.0,0.0,1);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// mask rendering
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glEnable(GL_STENCIL_TEST);
glEnable(GL_ALPHA_TEST);
glBlendFunc(GL_ONE, GL_ONE);
glAlphaFunc(GL_NOTEQUAL, 0.0);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, _mask);
glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);
// scene rendering
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glDisable(GL_STENCIL_TEST);
glDisable(GL_ALPHA_TEST);
glBindTexture(GL_TEXTURE_2D, _texture);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
只是說明你的問題做了如*不工作*是不是真的有幫助。但我想你的問題是在這個其他問題解決的問題:http://stackoverflow.com/questions/7571075/how-to-create-stencil-buffer-with-texture-image-in-opengl-es-2- 0 – rotoglup 2012-07-08 15:52:50
謝謝你的評論。 通過「不工作」,我的意思是「_viewTexture」顯示沒有任何「_maskTexture」的蒙版效果。 我會盡力在未來更具體。 關於你提到的帖子,我已經閱讀過,但如果我沒有錯,他用着色器解決了他的問題,並放棄了模板緩衝區。 – EricD 2012-07-08 16:18:02
在閱讀您的解決方案後,我認爲您仍然有問題(可能暫時隱藏):您的第二次渲染通道禁用了模板測試,因此您所觀察的遮罩不能被此測試激發。此外,混合不應該用於模板測試,只適用於alpha測試。我認爲你觀察了你想要的掩蔽,但可能是因爲另一個原因,即模板印刷。 – rotoglup 2012-07-08 21:46:05