看到葉大的文章用JavaScript玩轉計算機圖形學(一)光線追蹤入門 - Milo Yip - 博客園,裏面有幾個小例子,因此把這些效果用C++再實現一遍。html
bajdcc/GameFramework,這一系列停更很久了,只是沒想到比較有趣的點子,拿它來練習再好不過,緣由有:Direct2D渲染、支持lua腳本、C++編寫。因爲是光線追蹤,因此實際上能夠說不依賴任何庫,只要有一個CPU就能完成計算。git
目前只作了兩個效果,具體的講述移步博客,我再也不贅述。github
代碼:數組
色彩圖lua
這只是一個基本的例子,講述如何經過像素操做來改變色彩。htm
咱們一張圖就如同一個二階矩陣,每一個顏色是一個int,就這麼簡單。blog
具體實現的過程:遞歸
光線追蹤(左) 以及 法向量圖(右)ip
左邊的光線追蹤我一開始也沒有搞明白,等到實現以後才明白。get
實現原理很簡單:
最主要操做:
理一下映射關係:3D空間-->2D屏幕,距離-->像素顏色。
右邊是一個法向量圖,不一樣的是:並不是由距離肯定像素顏色,而是由該點法向量肯定顏色。
激光打中球時,咱們計算出交點的座標,同時也計算出激光到該點的直線,其實就是法向量。
法向量方程有四個參數,可是這裏場景很簡單——球的法向量(單位向量)通過球心,因此其實只有三個參數,咱們將三個參數(-1~1)映射到RGB。
後面要完成的: