解決方法是不要將陰影繪製爲單獨的部分,而是將所有陰影部分的組合多邊形繪製爲一個多邊形。
這裏是展現你的問題一個小例子:
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();
}
注意兩個多邊形之間的白線:
但是,如果我不是繪製兩個多邊形作爲一個:
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();
}
然後白線消失:
這會工作,但會比較慢,因爲它需要一個額外的步驟來找到它的影子可以合併,然後將它們結合起來...我會考慮它,除非更好答案出現了,我會給這一個正確的。 –
@TimothyS。我不確定你的假設是否會變慢是正確的。畢竟,創建和繪製單個多邊形可能比繪製多個多邊形要快! –
果然,渲染可能會更快。我正在考慮確定哪些多邊形相鄰/可以組合的必要時間。我所做的是改變我的算法,尋找一個不會投射陰影的邊緣(假設形狀是閉合的,必須有一個,我認爲),然後從這個邊緣開始,並在我四處走動時合併。工作正確,而且速度更快。謝謝。 –