一、概念:簡言之,即在顏色緩存區和深度緩存區中,新舊顏色的覆蓋和替換問題;已經存在於緩存區的為目標顏色,即將進入緩存區的為源顏色; 二、應用場景:在不透明的圖形前繪製一個透明的圖形; 三、主要代碼實現 //核心代碼 四、效果 GitHub ...
一、概念:簡言之,即在顏色緩存區和深度緩存區中,新舊顏色的覆蓋和替換問題;已經存在於緩存區的為目標顏色,即將進入緩存區的為源顏色;
二、應用場景:在不透明的圖形前繪製一個透明的圖形;
三、主要代碼實現
//核心代碼
void RenderScene() { //清除緩存區 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); //設置四個固定矩形顏色 GLfloat vRed[] = {1.0f, 0.0f, 0.0f, 0.5f}; GLfloat vGreen[] = {0.0f, 1.0f, 0.0f, 1.0f}; GLfloat vBlue[] = {0.0f, 0.0f, 1.0f, 1.0f}; GLfloat vBlack[] = {0.0f, 0.0f, 0.0f, 1.0f}; //繪製四個固定矩形 //GLT_SHADER_IDENTITY:單元著色器 shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); redBatch.Draw(); shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vGreen); greenBatch.Draw(); shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlue); blueBatch.Draw(); shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlack); blackBatch.Draw(); //移動矩形設置混合功能 //開啟混合功能 glEnable(GL_BLEND); //設置混合因數 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //使用固定管線著色器 shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); //繪製 squareBatch.Draw(); //關閉混合功能 glDisable(GL_BLEND); //後臺渲染完成交給前臺 glutSwapBuffers(); }
四、效果