我正在用球體進行射線追蹤。當我們求解二次方程並得到兩個根時,我們需要採取哪個值?我的理解是我們需要最小的價值。但是,當我在計算交點和進一步照明計算時將這個值放在了一起時,我得到了錯誤的結果。當我採取較大的一個,它會給出正確的結果。我在網上看到了一些例子,其中一些正在縮小,另一些正在變大。我真的很困惑哪一個是正確的,爲什麼。帶球體的射線追蹤
Q
帶球體的射線追蹤
0
A
回答
0
假設射線的原點爲O,方向爲R(理想情況下爲單位矢量)。然後射線由參數方程O + tR定義。將其分解爲組件Ox + tRx,Oy + tRy和Oz + tRz。將它們代入圓的方程x^2 + y^2 + z^2 = 0。這會產生一個變量t的二次方程。找到方程的根源。
現在,如果你沒有真正的根,射線不會碰到球體。如果你有一個真正的根,那麼你碰到球體的一側。如果你有兩個真正的根,那麼你擊球兩次。你需要更接近的根(更小的t),除非t是負值,在這種情況下,交點在你後面,你不在乎。如果兩個根都是負數,那麼兩個交點都在光線的原點後面,您可以忽略它們。
如果球體從原點轉換而來,並且關心球體的旋轉和縮放,那麼隨着xy,yz,xz,x,y和z項的變化,球體的方程變得更加複雜。一般的二次曲面形狀被定義爲Ax^2 + By^2 + Cy^2 + Dxy + Eyz + Fxz + Gx + Hy + Jz + K = 0。代入參數線方程,求解t,取最小的非負根。
你的交點是O + tR其中t是最小的非負根。從那裏,我不知道爲什麼你的照明計算會關閉。
相關問題
- 1. 射線追蹤GLSL - 移動位置時的球體拉伸
- 2. 射線追蹤球體三角形陰影
- 3. 我怎樣才能把陰影射線追蹤球體
- 4. 射線追蹤 - 反射
- 5. 多線程射線追蹤
- 6. 射線追蹤旋轉
- 7. 射線追蹤照明
- 8. 射線追蹤 - 混色
- 9. 沒有Raymarching的光線追蹤元球
- 10. 射線追蹤反射顆粒感
- 11. 射線追蹤 - 折射錯誤
- 12. 光線追蹤球形紋理
- 13. 追蹤動畫球
- 14. 射線追蹤:帶區域燈的水平僞影
- 15. 使用three.js無紋理的體積射線追蹤
- 16. 二維射線追蹤算法
- 17. 折射向量(光線追蹤)
- 18. 射線追蹤陰影/底紋僞影
- 19. 射線追蹤:Bresenham's vs Siddon算法
- 20. 射線追蹤器迴路訂購
- 21. 追蹤NSTimer發射
- 22. Babylon.js刪除球體的光線反射
- 23. 遞歸射線追蹤器中的不正確反射
- 24. 光線追蹤器 - 爲什麼我的球體邊緣有斑點?
- 25. 光線追蹤:由於相機移動造成的球體失真
- 26. three.js - 射線相交和球體位置
- 27. 動作追蹤:追蹤球與法庭相關
- 28. 2D光線追蹤
- 29. Python光線追蹤
- 30. 片段着色器 - 球體光線追蹤 - 沒有任何顯示
http://www.codeproject.com/Articles/19732/Simple-Ray-Tracing-in-C 它錯了嗎? – debonair
據我所知,文章是不正確的。採取更大的根會導致你跟蹤球的另一面。我沒有時間去真正調查它,但它對我來說似乎是錯誤的。像這樣的例子有時看起來好像是正確的,但不是。在POVRay中渲染相同的場景並查看它的外觀會很有趣。 –