2015-04-06 74 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

果然,渲染可能会更快。我正在考虑确定哪些多边形相邻/可以组合的必要时间。我所做的是改变我的算法,寻找一个不会投射阴影的边缘(假设形状是闭合的,必须有一个,我认为),然后从这个边缘开始,并在我四处走动时合并。工作正确,而且速度更快。谢谢。 –

相关问题