A2:Transformations & Additional Primitives
實驗概述
本實驗的目標是實現更多的基本圖元(如Plane、Triangle類的實現)、新增兩種渲染模式(normal visualization和diffuse shading)、新增PerspectiveCamera類及變換(Transform類)的實現。
實驗步驟
1 TASK分析
下面右邊的序號是在實驗中實際完成的順序
[1] Object中更新球的計算交點方法【3】
[2] Object中派生出plane【2】,並實現其求交點方法【3】
[3] Object中派生出Triangle【2】,並實現其求交點方法【3】
紅色部分即爲|A|
[4]Object中派生出Transform【2】
[5]實現Transform類的求交點方法【3】
[6]實現normal visualization和diffuse shading的渲染模式【4】
在主函數中實現兩個渲染模式,同時封裝一下命令解析代碼
[7]在Camera中派生出PerspectiveCamera【1】
2 代碼結構分析
不需要的編寫的文件
hit.h(A2更新)、light.h(A2給出)、ray.h、vectors.h、materials.h、image.h©、matrix.h©、scene_parser.h©(A2更新)
需要編寫的文件
camera.h©、main.c、object3d.h©、
注意點(Hints)
除實驗中給出的Hints,這裏給出自己在完成過程中遇到的不懂之處。
1 virtual ~Object3D() {} 爲什麼加virtual,有什麼含義?
上述寫法叫虛析構函數,和其他函數一樣,我們通過在基類中將析構函數定義成虛函數以確保執行正確的析構函數版本;當我們delete一個動態分配的對象的指針時將執行析構函數,如果該指針指向繼承體系中的某個類型,則有可能出現指針的靜態類型與被刪除對象的動態類型不符的情況。
2 virtual 和 override
override只能對virtual進行重寫
3 叉乘座標系的表示方式
右手法則(right hand rule)
4 new並delete指針數組的方式
5 C/C++ assert()函數用法
6 error C2065: “M_PI”: 未聲明的標識符
實驗結果
部分實驗結果如下: