2022年4月12日 星期二

熱血的小葉老師的圖學筆記 Week08

# Week08

電腦圖學 Week08 2022-04-11

1. 主題: 3D模型

2. 主題: OBJ模型檔 (v vt vn f)

3. 實作: glm.h glm.cpp (c)

4. 期中考題: OpenGL必背10函式


1. jsyeh.org/3dcg10 下載

windows.zip => 下載\windows\Light Material.exe

data.zip    => 下載\windows\data\ 3D模型

source.zip 

執行 Light Material.exe 今天的主角(打光/模型)


## step01-1

複習上次上課時的課本打光範例, 確定大家可以執行。裡面的 Light Material.exe 有用到「打光、模型」是今天的主角


step01-2 實作看看!!! (GLUT的範例, source.zip 的範例)


2. freeglut Moodle下載/安裝, lib\libglut32.a

File-New-Project, GLUT專案, 偷它的程式 放 Notepad++


## step01-3 了解 GLUT範例 sample.cpp 177行 做什麼事


step01-3 了解 GLUT範例 sample.cpp 177行 做什麼事,其中有 include glut.h, 有介紹 GLUT callback 像是 display() mouse() motion() keyboard(), 有期中考題,像是 glPushMatrix()等, 重點是打光的陣列、打光的函式.zip


TODO: 開blog

```c++

#include <GL/glut.h>

```


GLUT callback ? 會被 GLUT 呼叫的函式

我們寫的那些display() keyboard() mouse() motion()函式


```c++

//期中考試題

glPushMatrix();//備份矩陣

  glTranslatef(x,y,z);//移動

  glRotatef(角度, x,y,z);//轉動

  glScalef(x,y,z);//縮放 (有50分)


glPopMatrix();//還原矩陣

```


打光的程式碼: (1) 打光的陣列, (2) 打光的函式


TODO: 寫 Blog (ing)


## step01-4 從 GitHub 拿出上週的程式!!! week06_light 

git 下載你上週的程式

git clone 下來 或在你的專案資料夾裡 git pull

把 week06_light\main.cpp 用 Notepad++ 開起來, copy

paste 到 week08_model 的 main.cpp

執行,會看到打光的黃色茶壼



## step02-1 把 source.zip 看裡面的3個程式 glm.h glm.c lightmaterial.cpp, 拿裡面的程式來用,便能讀入3D模型



step02-1_把 source.zip 看裡面的3個程式 glm.h glm.c 研究 lightmaterial.cpp, 拿裡面的程式來用,便能讀入3D模型, 要include 雙引號的 glm.h 要把 glm.c改檔名成glm.cpp 並加入專案, 再用 Notepad++研究學習lightmaterial.c的程式內容 .zip


1. glm.h 我們要 include 它

2. glm.c 改檔名 glm.cpp 要加入專案

3. lightmaterial.cpp 用 Notepad++ 研究"學習"


TODO: Blog (ing)

```C++

#include <GL/glut.h> //角括號,是系統的include裡 的檔案

#include "glm.h" //雙引號,同目錄裡 的檔案

```


```C++

GLMmodel* pmodel = NULL; //指到GLMmodel模型的指標,NULL代表還沒好

```


```C++

void

drawmodel(void)

{

    if (!pmodel) {

pmodel = glmReadOBJ("data/soccerball.obj");

if (!pmodel) exit(0);

glmUnitize(pmodel);

glmFacetNormals(pmodel);

glmVertexNormals(pmodel, 90.0);

    }


    glmDraw(pmodel, GLM_SMOOTH);

}///用來畫3D模型的程式碼, "學習它"

```


## step02-2 畫 3D 模型檔

step02-2_畫 3D 模型檔,要把 glutSolidTeapot()改成畫 drawmodel(), 要在下方Build Log 找你的 working dir 工作目錄 好像是 Desktop的freeglut的bin目錄, 在裡面放 data資料夾, 以便讀取 data的 soccerball.obj 模型, 再把glm.cpp 及 glm.h 放在 week08_model 目錄中, 再 Add files 把 glm.cpp 加到專案中.zip


1. (用哪一行程式?) drawmodel() TODO: 在 display()取代 glutSolidTeapot()

2. (檔案在哪裡?) 要在放 working dir 工作目錄裡!!!!

3. (在 CodeBlocks下方 藍色 Build Log 說我們的工作目錄在...)

4. (in C:\Users\...\Desktop\freeglut\bin\ )

5. TODO: 剛剛下載的 下載\data.zip 裡面的 data資料夾,整包放在 "工作目錄"

6. TODO: 把 glm.h 還有 glm.c (檔名改成 glm.cpp) 放到 week08_model 目錄

7. 注意: 副檔名要看到才行!!!! 

8. TODO: 在 week08_model 的專案中, Add 同目錄裡面的 glm.cpp


## step02-3

複習問問題



## step03-1

講解各種模形,可以自己改, 再把專案 week08_model File-Save Project存檔, 放到 GitHub 裡


## step03-2 介紹3D模型相關資料

1. Wavefront OBJ 檔 https://zh.wikipedia.org/wiki/Wavefront_.obj%E6%96%87%E4%BB%B6

2. Wavefront OBJ 英文介紹較詳細https://en.wikipedia.org/wiki/Wavefront_.obj_file

3. OBJ vs. MTL 檔, 其中 .mtl 檔 material (m t    l)

4. v 是 vertex, vn 是 vertex normal, vt 是 vertex texture coordinate, f 是 face 點線面的面


## step03-3

期中考 OpenGL 必背10函式 模擬練習


```

jsyeh.org/gl

是OpenGL的GL

```


考試練習:請在下方「淡黃文字區」輸入老師教的 OpenGL必背10函式(11行程式)。 \

拼字(含大小寫)必須完全正確、參數的數目也需要正確,要合文法、能compile編譯,並記得加中文註解。 \

完成後,點擊按鈕【按我評分】自行模擬評分


```

1.  glPushMatrix(); //備份矩陣

2.    glTranslatef(x,y,z);//移動

3.    glRotatef(角度, x,y,z);//轉動

4.    glScalef(x,y,z);//縮放

5.    glBegin(GL_POLYGON);//開始畫

6.      glColor3f(r,g,b);//色彩

7.      glTexCoord2f(tx, ty);//貼圖座標

8.      glNormal3f( nx,ny,nz);//打光法向量

9.      glVertex3f(x,y,z);//頂點

10.   glEnd();//結束畫

11. glPopMatrix(); //還原矩陣

```

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...