在 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不是解決方案。
渲染 覆蓋透明度 時渲染到紋理時使用透明度
慕田峪9158850
2022-09-14 16:53:11