2012-06-16 39 views
2

使用類似glColor4f(0f, 0f, 0f, 0f);的方法,它將值設置爲所放入的任何參數。但是,我想要做的僅僅是稍微更改顏色。是否有任何現有的OpenGL方法將其參數添加或減去它現有的顏色?用於更改現有顏色的方法OpenGL

我唯一能做的就是先獲取顏色值,然後編輯我想要的顏色值,最後用glColor4f()發送回來。

所以,最後,我想知道是否有編輯現有RGBA的方法,或者至少檢索現有的RGBA。

回答

2

那麼,你可以通過使用glGetGL_CURRENT_COLOR得到最後一個值爲glColor4f,但我不會推薦它; glGet操作通常對您的性能不利,所以儘量不要頻繁操作。

一個更好的主意是維護您發送到glColor4f的最後一個值的本地副本,以便您擁有數據客戶端,而不必從opengl驅動程序請求它。

沒有辦法增加或減少我知道的當前顏色。

編輯:其實我只是擡頭看看這個函數叫做glSecondaryColor,它可以做你想做的。您可以提供第二個RBG顏色,然後啓用GL_COLOR_SUM,並將兩種顏色相加。

+0

這是完美的,但它不適用於減法的負參數,例如'glSecondaryColor3d(0,-15/255d,0)'。不過,我已經玩過了,我很確定我可以通過執行'glSecondaryColor3d(15/255d,0,15/255d)'來達到同樣的效果。無論如何,這正是我所尋找的,所以謝謝。 – GlassZee

+0

真的嗎?根據手冊頁,您應該能夠提供負面的顏色。 http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml @GlassZee – Tim

+0

是的,當你輸入底片時,它不會顯示爲差異。真是遺憾,真的。但是我想出了一個更好的解決方案 - 從R,G和B開始,然後慢慢地將G降低到0.這實際上是「相同的區別」。只需按照添加到它們上的量將原始紋理變暗即可。 – GlassZee