Presentation is loading. Please wait.

Presentation is loading. Please wait.

好孩子的 CG 教室 - 輕輕鬆鬆寫 CG 作業 2-Bump map. 為什麼有這份投影片呢 ? 聽說有人說助教上課講太快 Bump map 都聽不懂 導致大家第二部分的作業都怪怪的.

Similar presentations


Presentation on theme: "好孩子的 CG 教室 - 輕輕鬆鬆寫 CG 作業 2-Bump map. 為什麼有這份投影片呢 ? 聽說有人說助教上課講太快 Bump map 都聽不懂 導致大家第二部分的作業都怪怪的."— Presentation transcript:

1 好孩子的 CG 教室 - 輕輕鬆鬆寫 CG 作業 2-Bump map

2 為什麼有這份投影片呢 ? 聽說有人說助教上課講太快 Bump map 都聽不懂 導致大家第二部分的作業都怪怪的

3 EZ 的 Bump Map 的方法 因為真正的 bump map 非常繁瑣, 所以這 裡提供替代方案教學 請各位看到資料夾中 ◦ fiber_bump.bmp ◦ fiber.bmp 真正要看的其實是 fiber_bump 他代表貼 圖高度 ( 貼圖顏色還是要看 fiber) 所以如果怕麻煩的話也可以把 fiber.bmp 的 (R+G+B)/3 ( 效果是差不多的 )

4 簡單的 Bump Map 的方法 (cont) 但請注意,不管是哪一張貼圖出來的取 出的 rgb 值都不是 normal!!! 請勿直接 assign 那 normal 到底要怎麼算呢?

5 容易的 Bump Map 的方法 (cont) float temp = 1.0/512.0; // 算出每個 tixel 之間的距離 vec2 i = vec2 ( gl_TexCoord[1].x,gl_TexCoord[1].y ); //i 是計算的 pixel 位置 vec2 j = vec2 ( gl_TexCoord[1].x+temp,gl_TexCoord[1].y ); // 是其右方的 pixel 位置 vec2 k = vec2 ( gl_TexCoord[1].x,gl_TexCoord[1].y+temp ); //k 是 i 上方的 pixel 位置 vec4 i_color = texture2D(colorTexture,i);// 根據位置取得顏色 vec4 j_color = texture2D(colorTexture,j); vec4 k_color = texture2D(colorTexture,k); i (x,y) k (x,y-1) j (x-1,y)

6 單純的 Bump Map 的方法 (cont) v = || i - k || 就是垂直方向的高度差 u = || i - j || 就是水平方向的高度差 三維方向的三個軸 x, y 和 z 先將法向量對 z 軸旋轉 v 再將法向量個 z 值 scale u 倍 最後將法向量 normalize 新的 normal 就 產生囉 \^o^/

7 方法好像跟老師教的不同?? 投影片的 Pu, Pv 跟 model 的 texture 參數化 有關;又因為 teapot 是圓柱投影,只跟 Y 軸有關,所以經過簡化後才能用這個 偷吃步的方法。 所以想做正統方法的請私底下來找助教 或自行上網查詢。

8 補交有什麼好處呢? 現在大家的方法幾乎是都錯的,但助教 會酌量給分,但也鼓勵想做的同學 ( 或 想多拿點分數的 ) 可以補交 bump map , 會再額外加分 再助教送成績以前,都可以上傳補交, 請各位好好把握!

9 GDI plus GDI + 是一種好東西 他可以幫助你寫期末專題 + 在這裡念做 plus

10 如何輕鬆的搞定 GDI +(1) 宣告 #include #pragma comment(lib, "gdiplus.lib") using namespace Gdiplus; GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; // Initialize GDI+. GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

11 如何輕鬆的搞定 GDI +(2) // 產生一張畫布 PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd,&ps); Graphics g(hdc); // 開始畫東西 g.DrawImage(…);// 畫圖 g.FillRectangle(…);// 填滿矩形 …

12 如何輕鬆的搞定 GDI +(3) 剩下的使用方法請參考範例程式 brush, pen, string and draw picture 裡面 有詳細的應用方法 如果還不夠 …. 請參考 MSDN MSDN

13 給要做 RAY TRACING 的人 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90.0, (GLfloat)WinW/(GLfloat)WinH, 1.0, 1000.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(WinW/2, WinH/2, WinH/2, WinW/2, WinH/2, 0.0, 0.0, 1.0, 0.0); //Light(); // clear the buffer glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GLfloat r_color = 1.0, g_color=1.0, b_color=1.0;

14 int i,j; for(i=0;i<WinW;i++){ for(j=0;j<WinH;j++){ glBegin(GL_POINTS); glColor3f(r_color,g_color,b_color); glVertex2i(i,j); glEnd(); }

15 END


Download ppt "好孩子的 CG 教室 - 輕輕鬆鬆寫 CG 作業 2-Bump map. 為什麼有這份投影片呢 ? 聽說有人說助教上課講太快 Bump map 都聽不懂 導致大家第二部分的作業都怪怪的."

Similar presentations


Ads by Google