2016-06-18 70 views
1

我該如何解決sphere()輸出的這種訛誤?我該如何解決這個sphere()輸出的腐敗問題?

enter image description here

void setup() { 
    size(600, 600, P3D); 
} 

void draw() 
{ 
    background(0); 
    translate(width/2, height/2); 
    strokeWeight(0); 
    fill(color(255, 255, 255), 128); 
    sphereDetail(10);sphere(100); // corrupt: http://i.imgur.com/1XmA8Om.png 
} 

回答

3

一堆谷歌搜索後,這裏就是我發現:

這是不是一個真正的錯誤或腐敗,因爲它究竟是如何的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問題,討論添加此功能。但是這不是很好的記錄,所以如果有人有更多的信息,我會很樂意擴大這個答案。

+0

謝謝。這受到明顯繪製球體隱藏背面的缺點的影響,因此像素顏色是192x3,而不是由alpha指定的128x3。但它可能比沒有好。 – ChrisJJ

+0

@ChrisJJ也許我錯過了一些東西,但看到球體的後部對我來說似乎是正確的。想想現實生活中的彩色中空玻璃球體:你看到球體的前部,然後通過它看到球體的後部,然後通過它看到球體後面的任何物體。你不會停止看到球體的後面。 –

+1

不錯的答案(+1)! –