學習光線追蹤 6 第一次顯示

2021-10-01 17:52:10 字數 1601 閱讀 1197

前面做了那麼多準備,我們有了相機類模擬相機,有了球類,有了光線類模擬光線,現在就用這些東西來顯示一下,算是一次除錯。

先來一張效果圖。

這次主要是將之前寫過的功能整合了一下,並且對之前的類做了一些小修改。

光線類中新增了一下東西。

class ray

~ray();

};

新增了光線經過碰撞計算後得到的資訊,碰撞物體,其實就是光線發出點所在物體,還有光線長度,出發點法向量。

多邊形類也新增了乙個功能,判斷指定光線是否與其相交。

class polygon

polygon();

~polygon();

};

基類的intersect什麼都沒有,就是乙個返回值,球中的對應函式實現如下。

ray sphere::intersect(ray ray)

float dissubr = dot(v , v) - (radius * radius);

float ray_v_dot = dot(ray.direction , v);

if (ray_v_dot <= 0) }

return result;

}

上面的**參考了乙個js寫的教程中的演算法,我在其中新增了折射所需要的**。

之後在主函式中實現光線追蹤,目前還不算是追蹤,我們只是顯示出了深度資訊。

}當然還可以顯示法向量資訊,順便檢查一下演算法實現的正確與否。

將**做簡單的修改即可。

opencv的顏色是bgr,所以顯示的時候要注意下。

release中的0.01

glm庫和opencv庫需要自行配置好

第一次學習

printf 函式和 scanf 函式分別為輸出和輸入函式兩個函式都使用格式字串和引數列表。printf函式列印資料的指令要與待列印資料的型別相匹配。在 和轉換字元中間插入修飾符可修飾基本的轉換說明 scanf函式是輸入函式,它把輸入的字串轉換為整數 浮點數 字元或字串,而printf函式正好與他相...

第一次學習oc

1.oc裡面所有的物件都是引用的 2.command line tool沒有沙盒,所以用完整路徑 3.讀檔案並輸出,其中涉及到nsdata nsstring import int main int argc,const char argv nsdata data fm contentsatpath ...

第一次學習Linux

我就讀於西安的一所大學,學校挺好,就是自己不努力學習,現在對於本專業的課程不怎麼感冒,所以自學 linux 第一次接觸 linux 是看到我姐拿的一本關於 linux 的書 鳥哥的linux 私房菜。我原來還以為是一本菜譜 原諒我的無知 然後我就拿起來來看了一下,就突然萌發了想學 linux 的想法...