2015-04-06 108 views
1

我正在處理一個處理項目來模擬非常基本的陰影。大多數情況下,我已經得到它的工作;每個物體的每個邊緣檢查其背部是否面向燈光。如果是這樣,則使用該邊添加陰影多邊形,而其他陰影多邊形則從遠離光的點離開。可以在處理中消除非描邊多邊形之間的空間嗎?如果是這樣,怎麼樣?

但是,當我試圖從純色陰影轉變爲透明時,我遇到了一些問題。也就是說,因爲陰影是由多個形狀的邊界趨於重疊,使它們比其他地方更暗:

Shadows with Lines Between Them

我禁用的陰影行程,提高了效果,但留下的之間的小線陰影,儘管這些面是相同的邊緣:

Shadows with Space Between Them

是否有消除這種人爲的方法嗎?如果是這樣,怎麼樣?

回答

1

解決方法是不要將陰影繪製爲單獨的部分,而是將所有陰影部分的組合多邊形繪製爲一個多邊形。

這裏是展現你的問題一個小例子:

void setup(){ 
    size(500, 500); 
} 

void draw(){ 

    background(255); 

    noStroke(); 

    fill(0); 
    ellipse(mouseX, mouseY, 10, 10); 

    fill(128, 128, 128, 128); 

    beginShape(); 
    vertex(mouseX, mouseY); 
    vertex(0, height); 
    vertex(width, height); 
    endShape(); 

    fill(128, 128, 128, 128); 

    beginShape(); 
    vertex(mouseX, mouseY); 
    vertex(width, height); 
    vertex(width, 0); 
    endShape(); 
} 

注意兩個多邊形之間的白線:

shadows with line between them

但是,如果我不是繪製兩個多邊形作爲一個:

void setup(){ 
    size(500, 500); 
} 

void draw(){ 

    background(255); 

    noStroke(); 

    fill(0); 
    ellipse(mouseX, mouseY, 10, 10); 

    fill(128, 128, 128, 128); 

    beginShape(); 
    vertex(mouseX, mouseY); 
    vertex(0, height); 
    vertex(width, height); 
    vertex(width, 0); 
    endShape(); 
} 

然後白線消失:

shadows with no line between them

+0

這會工作,但會比較慢,因爲它需要一個額外的步驟來找到它的影子可以合併,然後將它們結合起來...我會考慮它,除非更好答案出現了,我會給這一個正確的。 –

+0

@TimothyS。我不確定你的假設是否會變慢是正確的。畢竟,創建和繪製單個多邊形可能比繪製多個多邊形要快! –

+0

果然,渲染可能會更快。我正在考慮確定哪些多邊形相鄰/可以組合的必要時間。我所做的是改變我的算法,尋找一個不會投射陰影的邊緣(假設形狀是閉合的,必須有一個,我認爲),然後從這個邊緣開始,並在我四處走動時合併。工作正確,而且速度更快。謝謝。 –

相關問題