一堆谷歌搜索后,这里就是我发现:
这是不是一个真正的错误或腐败,因为它究竟是如何的OpenGL(因此处理)被设计为表现。 Here是一篇比我能解释得更好的文章。
但基本上,Processing在OpenGL中绘制了一串三角形来为你呈现球体。由于您的球体是透明的,因此Processing正在将大量透明三角形绘制到屏幕上。这是有问题的,因为在这种情况下绘图顺序很重要。但默认情况下,Processing不会对它正在绘制的内容进行任何排序,因此最终会看到您所看到的工件。
你可以告诉处理通过使您setup()
函数内部的深度排序暗示来挑选基础,以深度:
hint(ENABLE_DEPTH_SORT);
有了这个此外,你有你漂亮的灰色领域:
你甚至可以在透明形状后面绘制透明形状:
void setup() {
size(600, 600, P3D);
hint(ENABLE_DEPTH_SORT);
}
void draw()
{
background(0);
translate(width/2, height/2);
strokeWeight(0);
sphereDetail(10);
fill(color(255, 255, 255), 128);
sphere(100);
translate(0, 0, -500);
fill(color(255, 0, 0), 128);
sphere(100);
}
试试这个不启用深度排序的提示,您将无法通过灰色球体看到红球!
但是,请注意,启用此功能会降低渲染速度。
Here是一个GitHub问题,讨论添加此功能。但是这不是很好的记录,所以如果有人有更多的信息,我会很乐意扩大这个答案。
谢谢。这受到明显绘制球体隐藏背面的缺点的影响,因此像素颜色是192x3,而不是由alpha指定的128x3。但它可能比没有好。 – ChrisJJ
@ChrisJJ也许我错过了一些东西,但看到球体的后部对我来说似乎是正确的。想想现实生活中的彩色中空玻璃球体:你看到球体的前部,然后通过它看到球体的后部,然后通过它看到球体后面的任何物体。你不会停止看到球体的后面。 –
不错的答案(+1)! –