解决方法是不要将阴影绘制为单独的部分,而是将所有阴影部分的组合多边形绘制为一个多边形。
这里是展现你的问题一个小例子:
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。我不确定你的假设是否会变慢是正确的。毕竟,创建和绘制单个多边形可能比绘制多个多边形要快! –
果然,渲染可能会更快。我正在考虑确定哪些多边形相邻/可以组合的必要时间。我所做的是改变我的算法,寻找一个不会投射阴影的边缘(假设形状是闭合的,必须有一个,我认为),然后从这个边缘开始,并在我四处走动时合并。工作正确,而且速度更快。谢谢。 –