300 likes | 449 Views
好孩子的 PSP 教室. 好孩子的 PSP BSP 教室. 2010.05.19. 0. 前言. Q: 為什麼會有這份投影片 ? A: 因為太多人問一樣的問題了 … ex: 而且 , 之前助教好像恍神講錯東西了 …. 正面跟反面怎麼分 ? 會不會有牆壁被切兩次 ? 被切兩次的面又要怎麼表示 ? 兩條線的交點要怎麼算 ? 作業會不會延期 ? PSP 改機要改哪個版本 ??. 1.Q&A. 來解答一下重複的一些問題 已經開始寫的聽完這部分就可以下課了 ~. 1.Q&A. Q: 正面跟反面怎麼分 ?
E N D
好孩子的PSPBSP 教室 2010.05.19
0.前言 • Q: 為什麼會有這份投影片? • A: 因為太多人問一樣的問題了… • ex: • 而且,之前助教好像恍神講錯東西了… • 正面跟反面怎麼分? 會不會有牆壁被切兩次? 被切兩次的面又要怎麼表示? 兩條線的交點要怎麼算? 作業會不會延期? PSP改機要改哪個版本??
1.Q&A • 來解答一下重複的一些問題 • 已經開始寫的聽完這部分就可以下課了~
1.Q&A • Q: 正面跟反面怎麼分? • A: 測資中有給定觀察者所在的initial 位置, 以”面向觀察者” 的面當正面(front), 另一面當反面(back). 建Tree的時候正面丟左邊, 反面丟右邊. ex: 牆3 牆1 牆2
1.Q&A • Q: 會不會有牆壁被切兩次? • A: 助教那麼陰險正直, 當然會啦~ • 大概有2組以上的測資會切n次吧 = = 牆2F 牆2F 牆1 牆2 牆1 牆1 牆2B 牆3 牆2B 牆3 牆3F 牆3B 牆2F 牆1 牆2B 牆3F 牆3BB 牆3BF
1.Q&A • Q: 那會不會有斜的牆壁? • A: 助教那麼(嗶~~) 當然會啦~ 其實我還沒設計…可能最難的那組測資會有斜的牆壁吧 可能而已啦…
1.Q&A • Q: BSP Tree建好後, 移動視角的時候需要重新建嗎? • A: 阿哈哈哈 我之前好像說要… 其實是不用的 (認真) BSP Tree建Tree時所分的Front跟Back其實只是為了把空間中其他polygon分成兩個區域, 並沒有真正的”前”跟”後”的關係, 前後關係其實是在畫圖(render)時才會根據觀察者的眼睛判斷(先畫”實際上的後” -> 畫牆壁 -> 畫”實際上的前”). 所以你會發現投影片上的pseudo code(P.25)並不一定先畫左子樹還右子樹, 而是以view的位置決定. 我就說我沒睡飽會講錯話嘛….
1.Q&A • Q: 兩條線的交點要怎麼算? • A: 最笨的辦法, 請算出直線方程式... • 至於聰明一點的…有人想到請教我XD x-y-1=0 <0 >0
1.Q&A • Q: BSP Tree要怎麼建….? • A: 這問題問得太好了 我們下堂課慢慢討論… • Q: 作業會不會延期? • A: 我想應該不會.
下課! • 已經可以回去寫code的同學們就回去吧! • 還聽不懂我在講什麼的…
2. An easy example for creating BSP Tree • 考慮投影片上的測資: 1 100 800 100 500 1.0 1.0 1.0 2 200 500 200 400 1.0 1.0 0.0 3 400 800 100 800 1.0 0.0 1.0 4 400 700 400 800 0.0 1.0 1.0 5 500 700 400 700 1.0 0.0 0.0 6 500 800 500 700 0.0 0.0 1.0 7 800 800 500 800 1.0 1.0 0.0 8 800 500 800 800 1.0 0.0 1.0 (0,0) X
1 1 2 3 4 5 6 7 8 (0,0) X
1 1 2 3 4 5 6 7 8 2 (0,0) X
1 3 1 2 3 4 5 6 7 8 2 (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b 4 (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b 4 5 (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b 4 5 6 (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b 4 5 6 7 (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b 4 8 5 6 7 (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b 4 5 8b 8f 6 7 (0,0) X
1 1 2 3 4 5 6 7 8 2 3f 3b 4 5 8f 6 7 8b (0,0) X
Result 1 • Preorder: 1 2 3F 4 5 8F 6 7 8B 3B • Inorder: 8F 5 6 8B 7 4 3F 2 3B 1 • Postorder: 8F 8B 7 6 5 4 3F 3B 2 1 2 3f 3b 4 5 8f 6 7 8b
Rendering • 請參閱第七章P25的pseudo code.
1 2 3f 3b 4 5 8f 6 1 2 3 4 5 6 7 8 7 8b render順序: 1 3b 2 3f 7 8b 6 5 8f 4 6比4早render->6被4蓋住 (0,0) X
1 2 3f 3b 4 5 8f 6 1 2 3 4 5 6 7 8 7 8b render順序: 1 3b 2 3f 4 6 7 8b 5 8f 4比6早render->4被6蓋住 (0,0) X
除了這些之外… • 1.助教提供的bsp.cpp裡的inorder跟postorder function 寫錯了 XD 請自己更改(把打錯的preorder(…)改成inorder/postorder) 或是到網頁上下載新版的範例程式. • 2.為了輸出, 請把Tnode裡面的char label改成char* label 這樣label才能隨著切割次數越來越長. (沒改也是可以畫出場景啦, 只是輸出不一樣…) • 3.牆壁如果沒顏色的話請檢查newwall和new Tnode有沒有給予color值(預設我記得是沒有的…) • 4.貼圖有貼有分~ 貼一種15 兩種20
END • 阿 期中考… • 最後一題如果寫opengl code然後寫對的可以來要分數(寫錯的就自己斟酌吧= = )