原创 學習光線追蹤(16)---折射計算[1]

0.簡介 前面的反射效果已經和非光追渲染有很大區別了,這回加上折射計算,效果會更好。 1.折射計算 折射計算相對反射要複雜一點,折射公式網上有的是,我就不在這裏進行推導和詳細講解了,有需要的可以看下面這篇博客。 光線折射計算 2.添加計算

原创 學習光線追蹤(16)---折射計算[2]

0.簡介 上一次實現了折射,看到了一個透明的球體,這次也是一次展示,放入了一個玻璃方塊,就是一塊玻璃磚。 1.效果 不在過多敘述就是添加了一個新的透明盒子 折射效果 可以看到地面上有一個透明的立方體。 三角面是逆時針繪製的。 2.源碼

原创 學習光線追蹤(11)---紋理加載

0.簡介 之前顯示的圖形中都是單一顏色的,這次我將紋理加上去,這樣就可以顯示更加豐富的元素了。 1.紋理 添加紋理功能需要對源程序多個地方修改,因爲有了紋理就會增加紋理座標的處理,所以在定義多邊形的時候,就要在在原來頂點的基礎上添加紋理座

原创 學習光線追蹤(6)---第一次顯示

0.簡介 前面做了那麼多準備,我們有了相機類模擬相機,有了球類,有了光線類模擬光線,現在就用這些東西來顯示一下,算是一次調試。 1.效果 先來一張效果圖。 深度顯示 2.解析 這次主要是將之前寫過的功能整合了一下,並且對之前的類做了一些

原创 學習光線追蹤(5)---材質

0.簡介 材質,這裏我不會講的和教科書上的一樣,所以也不要把我接下來要說的東西當作正確的,或者是標準的,因爲這是我自己設計的,可能會有缺陷。 1.材質參數 材質一般會影響物體表面的反光,顏色,折射等。那麼就將反光係數(正反光參數,漫反射參

原创 自制編程語言(10)---輔助虛擬環境---內存

0.簡介 在生成中間碼之間,要設計好一個運行內存模型。這裏直接就用數組來代替內存空間。 1.內存 class Memory { public: Memory() { //初始化內存 memory = new char[819

原创 學習光線追蹤(14)---法線紋理

0.簡介 如果想讓上一次的牆面更加真實一些,就需要法線紋理來修飾一下了。 1.法線紋理 我這裏簡單介紹一下法線紋理,模型表變的法向量一般都比較單一,例如上一篇博客裏的牆面,法向量都是朝向一面的,這就帶來一個問題,牆面就很假,很光滑,跟瓷磚

原创 學習光線追蹤(1)---環境配置

0.簡介 本着輕量級的目的,也是輕便的目的,所以環境我並沒有用太多額外的東西,主要是兩部分,一個是顯示輸出,一個是線性代數計算。   1.GLM庫 這個在OpenGL編程中用的多一些,主要是矩陣向量計算的庫,也不用編譯,下載來配置好包含目

原创 學習光線追蹤(12)---畫一面牆

0.簡介 最近事情很多,這算是纔有些空寫寫,先拿一個簡單的緩一緩,不然之前寫的都快忘了。上次畫出了三角形,又添加了紋理,這次畫一個牆面做背景。 1.牆面 一面牆就是一個矩形平面,兩個三角形拼接起來就可以了,但是三角形一個一個的聲明比較麻煩

原创 學習光線追蹤(10)---三角形

0.簡介 在OpenGL或者D3D中,都有一個最基本的圖元,就是三角形,三角形可以組成任意形狀,並且計算起來也容易,爲了能讓我們繪製出更多的形狀,這次來實現一個三角形類。 1.三角形判斷 三角形在空間中形成了一個平面,所以,三角形一定在某

原创 學習光線追蹤(0)---準備工作

0.介紹 其實想晚一點寫一篇相關博客,與大家分享一下最近學習的光線追蹤,但是VS2019不太給力,出了BUG,這導致我之前寫的代碼丟了一部分,本打算是整理好一遍發的,這回正好,邊整理邊發吧。 1.準備工作 首先說明,我不是專門研究光線追蹤

原创 自制編程語言(11)---中間碼---變量聲明的中間碼

0.簡介 變量聲明需要有中間碼來操作,這裏設計成入棧的操作。 1.實現 struct operand { operand(){} //類型,數值,數值類別(數值,地址) operand(int t,int n,bool addr)

原创 學習光線追蹤(7)---材質採樣

0.簡介 前面可以顯示出效果,這裏我們將材質功能用上,讓顯示的物體具有更加真實的效果。 1.光照模型 光照模型一般比較常見的是phong模型,在這裏涉及的光照效果更多,所以我們就分析一下我們自己的光照模型。 先用一個比較簡單的模型,就是物

原创 學習光線追蹤(9)---平面

0.簡介 之前繪製的都是球體,現在我們來嘗試繪製平面。 1.平面 平面表示方式有不少,這裏用點法式,一個法向量和一個頂點。 class Plane : public Polygon { public: Plane(); Plane(

原创 學習光線追蹤(2)---光線

0.簡介 光線追蹤中,計算的是光線,我們這次設計一個光線類。 1.光線類 光線中,包含了幾種屬性,方向,出發點,顏色,強度,還有一個獲取光線打到的點的函數。 class Ray { public: //光線起點 vec3 posit