2013-01-19 39 views
0

我想從頭開始編寫一個程序,用Java渲染一個帶有光線投射技術和phong照明的球體,但我有點失落。自己用光線投射實現phong照明

我瞭解海防方程係數背後的概念,但我不知道怎麼去矢量值,什麼是這一切與光線投射的關係

讓我們說,我想呈現在我的屏幕中間的球體,我有它的位置和半徑,所以(cx,cy,r)。我現在從哪裏開始?我究竟如何獲得矢量值?我的想法如下(僞)

int cx = window width/2 
int cy = window height/2 
int r = 30; 
for(i = 0 -> window height) { 
    for(j = 0 -> window width) { 
     if((j-cx)^2 + (i-cy)^2 < r^2) { 
      //point inside 
      Color c = phong(arguments..) 
      draw pixel j,i with color c 
     } 

    } 
} 

,但我不知道這是否正確與否,如果是,我怎麼矢量值,對於初學者來說,正常嗎?

你能指點我嗎?我嘗試了很多沒有成功的谷歌搜索,謝謝

+1

幾年前,我用Java編寫了一個非常非常簡單的射線追蹤器:https://github.com/gkopff/stingray - 也許這會給你一些啓發。 –

回答

0

用於計算法線的矢量通常來自幾何對象的鑲嵌(近似)。所以你把球體分解成三角形。然後,每個三角形(P1,P2,P3)具有其自己的正常矢量((P2-P1)×(P3-P1)。

的Phong濃淡處理方法是一種插值然後(理想地)模糊在所述線這放棄的事實,你畫的三角形,而不是一個真正的的。這不符合雙方圍繞角落有所幫助,但是。:(

對於細分,一種方法是逼近球體與Bezier surface patches,然後可以再細分爲適當的小尺寸和簡化爲三角形。My question over here探討做這項工作來繪製一個茶壺(莫倔強的革命表面,與球體無異)。