亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

渲染 覆蓋透明度 時渲染到紋理時使用透明度

渲染 覆蓋透明度 時渲染到紋理時使用透明度

慕田峪9158850 2022-09-14 16:53:11
在 OpenGL 中渲染到紋理(輔助幀緩沖器)時,任何透明內容都會覆蓋下面內容的透明度,而不是像透明度那樣添加透明度。這意味著,如果我在現有不透明對象上渲染透明對象,則結果是透明的紋理,即使它應該是不透明的。在此圖片中,空間通常呈現為背景,然后更改,然后渲染不透明的藍色,然后渲染綠色/紅色。渲染到的紋理用于渲染到原始紋理(窗口),結果如所見。framebufferframebufferframebuffer一些代碼:幀緩沖器/紋理創建:        int texture = glGenTextures();        framebufferID = glGenFramebuffers();        glBindFramebuffer(GL_FRAMEBUFFER,framebufferID);        glBindTexture(GL_TEXTURE_2D, texture);        int width,height;        width = (int)(getMaster().getWindow().getWidth()*(xscale/(16f*getMaster().getGuiCamera().getWidth()))*1.2f);        height = (int)(getMaster().getWindow().getHeight()*(yscale/9f)*1.15f);        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture,0);        int depth = glGenTextures();        glBindTexture(GL_TEXTURE_2D, depth);        glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth, 0);        this.texture = new Texture(texture,width,height,true);        glDrawBuffer(GL_FRONT_AND_BACK);這里的深度緩沖區是我試圖讓它工作的東西,但它對輸出紋理沒有影響。使用透明對象渲染 0 中的不透明對象不會導致生成的像素是透明的,否則它們將顯示為 和不透明對象的混合,那么為什么在我用來渲染到紋理的中會發生這種情況呢?難道不應該是一致的嗎?我覺得也許我錯過了一些依戀,但我不能確定是什么。我看到一個解決方案說使用,最后一個錯誤的意思是沒有alpha寫入,乍一看似乎可以工作,但是當透明度是我想要的時,我為什么要禁用透明度呢?如果保持打開狀態,它似乎也會導致許多問題。任何人都可以提供一些見解嗎?提前致謝!framebufferglClearColorframebufferframebufferglColorMask(true,true,true,false)編輯:經過進一步分析,glColorMask不是解決方案。
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

您必須使用可分離的混合函數,該函數分別處理 RGB 和 Alpha 值:gl混合通知分離。對于您繼續使用的 RGB 值。對于 Alpha 值,請使用類似的東西,以便事情簡單地相加。GL_SRC_ALPHA, GL_SRC_ONE_MINUS_ALPHAGL_ONE, GL_ONE

glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);


查看完整回答
反對 回復 2022-09-14
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

對于任何想知道的人,解決我的問題的最佳解決方案是使用“GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_DST_ALPHA,GL_ONE”)而不是“GL_SRC_ALPHA”,GL_ONE_MINUS_SRC_ALPHA)


查看完整回答
反對 回復 2022-09-14
  • 2 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號