2012-03-04 79 views
1

我試圖讓鏡面高光超過紋理映射的objetcs。據我所知,OpenGL不直接計算紋理顏色的最終顏色(例如純白色)的方法是調用glLightModelf(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR),但在OpenGL ES中不支持。OpenGL ES中的高光紋理?

那麼,我該怎麼做呢?我是否還需要使用另一種紋理作爲特別亮點,還有另一種更簡單的方法嗎?

比你!

P.S.我正在使用OpenGL ES 1.x

+0

假設OpenGL ES 1.0/1.1正確嗎?在OpenGL ES 2.0中,這將是微不足道的。 – 2012-03-04 19:26:38

+0

是的,opengl es 1.x,忘記提及它,對不起 – WaLi 2012-03-04 19:30:09

回答

1

一種解決方法是兩次運行:第一次使用環境渲染紋理&漫反射光照,第二次渲染將高光反射渲染到頂部(未啓用紋理處理) 。

+0

我會嘗試一下,並評論它是如何,謝謝! – WaLi 2012-03-04 19:36:13

+1

+1當然,在這種情況下,您應該使用疊加混合('glBlendFunc(GL_ONE,GL_ONE)')和'glDepthFunc(GL_EQUAL)'進行深度測試。 – 2012-03-04 19:45:31

+0

這似乎是正確的方式,但我無法讓它工作完美。使用混合函數'glBlendFunc(GL_ONE,GL_ONE)',整個物體看起來非常亮(光線是白色的),也許用其他混合函數會更好,但我找不出哪一個是 – WaLi 2012-03-04 20:06:55

1

感謝您的寶貴建議,他們拯救了我的一天。唯一的問題是閃爍。我首先想到深度緩衝區和有限的深度分辨率存在問題,但事實並非如此。我不得不使用gl.glDepthFunc(GL10.GL_ALWAYS);完美融合。但是對於複雜的基元,您將能夠看穿該物體。

玩了一個星期後,我發現只需在進行混合時禁用深度測試,並簡單地照顧每次渲染對象的順序。通常,您希望在繪製更近的物體之前完成遠物體的所有渲染過程。 這照顧我完全有的閃爍問題。