首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

OpenGL 材質/混合開啟後光照失效:狀態機衝突與著色器管線差異

     編輯:程式設計綜合問答

開啟材質映射 (glEnable(GL_TEXTURE_2D)) 或混合 (glEnable(GL_BLEND)) 後,固定管線光照變灰色或消失。

常見原因

  1. 材質環境模式預設為 GL_MODULATE:材質顏色 × 光照顏色。若材質無 Alpha 或 RGB 全白,光照正常;若材質顏色深/含 Alpha,光照被調制變暗。解決:glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE) 或確保材質顏色為白。
  2. 混合函數遮蓋光照:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 若材質 Alpha=0,片段被捨棄,光照不顯示。檢查材質 Alpha 通道。
  3. 著色器管線 (GLSL) 下固定管線光照無效:若啟用 Shader,需在 Shader 內自行計算光照,固定管線 glLight 失效。
  4. 狀態未恢復:關閉材質/混合後未 glDisable,導致後續繪製受影響。善用 glPushAttrib/glPopAttrib。

除錯建議

使用 glGetError()、RenderDoc 捕獲幀狀態,逐步檢查各 glEnable/Disable 對光照結果的影響。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved