2013-07-16 130 views
1

Comparison光線追蹤陰影錯誤

http://pastebin.com/vkTJt0sT

我試圖渲染圖像類同左邊一個,並具有與陰影+思考的問題。

現在,只有影子代碼是開放的顯示問題。

正如你所看到的,紅球應接近綠色的被隱藏,但像素都得到搞砸了一些奇怪的原因。當我關閉代碼的陰影部分時,它通常會呈現沒有陰影的紅色球。

我認爲這個問題的根源也在影響反射。希望你們能給我一些提示;我失去了它。

+1

您通常應該直接在您的文章中包含您的代碼(如果可能的話將其縮小到更小),而不是鏈接到外部網站。 – Ryan

+0

確保你不是自己的陰影。我之前寫過類似的東西,光線與它正在離開的表面相交,我通過將交點略微移向出射光線的方向(遠離表面)來固定它。 – Borgleader

+0

無法管理髮布代碼,所以我把它鏈接出來:/ – Esqarrouth

回答

4

鑑於您的左側圖像顯示癌症,這是陰影射線擊中反射對象的經典案例。當碰撞測試陰影射線時,您需要排除產生射線的表面。只需將源對象傳遞給你的影子函數,並忽略它。

此方法僅適用於凸形。如果你有形狀可以做自我陰影(例如圓環),你需要更一般。通常的做法是定義一個epsilon(浮點容錯)並忽略比這更近的任何交點。

另一種方法是檢測你打且表面。您不應該在球體上產生自身陰影,因爲射線的投射方向與表面法線相同(出射射線的點積和表面法線是正的) - 這不應被視爲陰影。

0

解決: 有一個算法問題,這是不容易解釋,

另一種方法是:Basicly我做一個檢查,如果餘弦角度大於0.0001,如果是更大然後這個我不不會影響它