【MIT6.837】A2:Transformations & Additional Primitives

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”: 未聲明的標識符

見此博客

實驗結果

部分實驗結果如下:

在這裏插入圖片描述 在這裏插入圖片描述

在這裏插入圖片描述 在這裏插入圖片描述

源代碼

xdobetter的github

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章