我將幾何存儲在顯示列表中,但我希望能夠在它們上繪製具有不同「色彩」的相同顯示列表。例如,如果我在顯示列表中有一個黑色和白色的頭骨,我想設置一個紅色的色調並繪製一個頭骨,然後設置一個藍色的色調並繪製出頭骨。我可以設置一個自定義函數來改變OpenGL中顯示列表的顏色嗎?
如果我能得到RGBA值,我確切知道如何轉換它們,但我不知道我可以在哪裏截取它們。目前顯示列表不包含紋理,但它們可能在未來,所以如果答案適用於或不適用紋理,它將會很好。
我將幾何存儲在顯示列表中,但我希望能夠在它們上繪製具有不同「色彩」的相同顯示列表。例如,如果我在顯示列表中有一個黑色和白色的頭骨,我想設置一個紅色的色調並繪製一個頭骨,然後設置一個藍色的色調並繪製出頭骨。我可以設置一個自定義函數來改變OpenGL中顯示列表的顏色嗎?
如果我能得到RGBA值,我確切知道如何轉換它們,但我不知道我可以在哪裏截取它們。目前顯示列表不包含紋理,但它們可能在未來,所以如果答案適用於或不適用紋理,它將會很好。
從概念上來說,顯示列表只是當您glCallList
時執行的一堆命令。所以無論它包含什麼,它就好像你直接使用這些命令一樣(但是也許是更高性能)。所以如果你的顯示列表包含一堆幾何命令,你怎麼給它們着色?是的,你正確的調用列表之前猜對了,使用通常glColor
命令:
glColor(...);
glCallList(...);
如果你希望你的對象有紋理,並且仍然是着色你可以使用紋理環境設置爲GL_MODULATE
(我想你不使用着色器,否則整個問題將會過時,無論如何)。如果你想讓你的物體點亮,當然,改變glColor
到glMaterial
。
但是,如果您在顯示列表中設置顏色,則您沒有機會獲取並更改它。但我不會建議你使用顯示列表,無論如何。如果使用它們來存儲幾何圖形並減少CPU-GPU拷貝和drawcall開銷,那麼爲什麼不使用VBOs,這正是爲此設計的(並且不會受到這種不確定的實現)。
顯示列表中已經有顏色,所以我開始使用片段着色器,我認爲它會解決問題。我第一次使用着色器是昨晚,所以我不能100%確定我能用它們做什麼。我可能會切換到VBO,因爲我沒有意識到顯示列表已被棄用。 – 2012-03-14 08:02:42