2016-11-16 101 views
2

我在光線跟蹤反射方面遇到了一些麻煩。正確地光線追蹤反射表面

這裏就是我期待看到:
Expected

但是,這就是我真正看到: Actual

現在,我如何獲得 的新方向基本認識反射射線是這樣的:
Reflection direction equation

這是我的代碼,模擬:

public Color calculateIlluminationModel(Vector normal, boolean isInShadow, Scene scene, Ray ray, Vector intersectionPoint) 
{ 
    if (isInShadow) 
    { 
     return getColorInShadow(scene); 
    } 
    else 
    { 
     Vector originalDirection = ray.getDirection(); 

     Vector reflectionVector = originalDirection 
       .subtract(normal 
         .multiply(2) 
         .multiply(originalDirection.dotProduct(normal) 
         ) 
       ) 
       .normalize(); 
     Ray reflectionRay = Ray.translateRayByEpsilon(new Ray(intersectionPoint, reflectionVector)); 
     return scene.getRayColor(reflectionRay); 
    } 
} 

但是球體從來不會正確地反映任何東西。我計算反射光線的方式有什麼問題嗎?

注意:scene.getRayColor(reflectionRay);是確定射線擊中顏色的射線追蹤組件。我相信這不是問題,但如果你認爲有必要展示這件作品,請告訴我。

+0

你確定normal和originalDirection是單位長度嗎? –

+0

@JasonC是的。他們都是正常化的。 –

+0

你確定法線從物體向外指向而不是向內? –

回答

1

您的反思數學似乎正確。圖像顯示充滿了很多陰影顏色。檢查一下看看會發生什麼,如果你把陰影變成虛假的,那應該有助於縮小它的範圍。

還要確保你的法線指向正確的方向,並且你的方向矢量都是標準化的(你說他們是,但如果其他人有類似的問題,這是值得雙重檢查)。