一堆谷歌搜索後,這裏就是我發現:
這是不是一個真正的錯誤或腐敗,因爲它究竟是如何的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)! –