在OpenGL中獲取重疊對象的Alpha蒙版的最佳方式是什麼?在下面的第一張圖中,我有三個網格與橢圓體重疊,深度測試已啓用。我的目標是獲得與第二張圖像相似的結果,其中白色代表阿爾法。以下是我正在使用的深度測試標誌。OpenGL中重疊對象的Alpha蒙版
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
在OpenGL中獲取重疊對象的Alpha蒙版的最佳方式是什麼?在下面的第一張圖中,我有三個網格與橢圓體重疊,深度測試已啓用。我的目標是獲得與第二張圖像相似的結果,其中白色代表阿爾法。以下是我正在使用的深度測試標誌。OpenGL中重疊對象的Alpha蒙版
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LEQUAL);
之前,您繪製的紅色,黃色和藍色格子,你應該啓用模板測試和設置您的模板操作glStencilOp功能是這樣的:
glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR);
glStencilFunc(GL_ALWAYS, 0, 1); // these are also the default parameters
這意味着模板緩衝區保持原樣如果深度測試失敗並且如果深度測試通過則增加。 繪製模板緩衝區後包含掩碼,其中0表示黑色,> 0表示白色在您的情況。 確保您的模板緩衝區在繪製之前被清除(glClear(GL_STENCIL_BUFFER_BIT)
)。
如果你得到這個面具,你必須紋理綁定到模板緩存紋理:
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
:
GLint with = ...;
GLint height = ...;
GLuint depthAndStencilMap;
glGenTextures(1, &depthAndStencilMap);
glBindTexture(GL_TEXTURE_2D, depthAndStencilMap);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_STENCIL, with, height, 0, GL_DEPTH_STENCIL, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
GLuint frameBuffer;
glGenFramebuffers(1, &frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depthAndStencilMap, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
圖紙,你必須結合並清除幀緩衝區前
繪製紋理後,depthAndStencilMap
包含紅色通道中的深度緩衝區以及「藍色」通道中的模板緩衝區,即模板緩衝區。 請注意,場景被繪製到幀緩衝區,而不是進一步到視口。
「最好」 是一個四個字母的單詞;)
你既可以