2012-03-13 20 views
0

我將幾何存儲在顯示列表中,但我希望能夠在它們上繪製具有不同「色彩」的相同顯示列表。例如,如果我在顯示列表中有一個黑色和白色的頭骨,我想設置一個紅色的色調並繪製一個頭骨,然後設置一個藍色的色調並繪製出頭骨。我可以設置一個自定義函數來改變OpenGL中顯示列表的顏色嗎?

如果我能得到RGBA值,我確切知道如何轉換它們,但我不知道我可以在哪裏截取它們。目前顯示列表不包含紋理,但它們可能在未來,所以如果答案適用於或不適用紋理,它將會很好。

回答

0

從概念上來說,顯示列表只是當您glCallList時執行的一堆命令。所以無論它包含什麼,它就好像你直接使用這些命令一樣(但是也許是更高性能)。所以如果你的顯示列表包含一堆幾何命令,你怎麼給它們着色?是的,你正確的調用列表之前猜對了,使用通常glColor命令:

glColor(...); 
glCallList(...); 

如果你希望你的對象有紋理,並且仍然是着色你可以使用紋理環境設置爲GL_MODULATE(我想你不使用着色器,否則整個問題將會過時,無論如何)。如果你想讓你的物體點亮,當然,改變glColorglMaterial

但是,如果您在顯示列表中設置顏色,則您沒有機會獲取並更改它。但我不會建議你使用顯示列表,無論如何。如果使用它們來存儲幾何圖形並減少CPU-GPU拷貝和drawcall開銷,那麼爲什麼不使用VBOs,這正是爲此設計的(並且不會受到這種不確定的實現)。

+0

顯示列表中已經有顏色,所以我開始使用片段着色器,我認爲它會解決問題。我第一次使用着色器是昨晚,所以我不能100%確定我能用它們做什麼。我可能會切換到VBO,因爲我沒有意識到顯示列表已被棄用。 – 2012-03-14 08:02:42

相關問題