2024年4月11日 星期四

BK Week08

 # Week08

## 下載課本範例

https://jsyeh.org/3dcg10/->source, data, win32

分析一下 data.zip 裡的檔案 解壓縮

-Al.mtl 看到裡面Ka Kd 打光對應的Meterial

-Al.obj 裡面很多內容

    -# 代表註解

    -可以再引用另一個 mtl 檔

    -v 代表頂點 vertex 後面有座標 x y z

    -f 代表面 face 或 facet 後面有頂點的編號 (幾邊形就會有幾個編號)


## wee08-0_sample

0. 下載 freeglut 至桌面, 並解壓縮, 更改 lib 中的檔名

1. File-New-project, GLUT專案, wee08-0_sample


## week08-1_glm_gundam

1. File-New-project, GLUT專案, week08-1_glm_gundam

2. 要把 source.zip 裡面的 glm.h glm.c 都 copy 到專案資料夾, 把 glm.c 檔名改成 glm.cpp

3. 在專案, 裡按右鍵 Add File 把 glm.cpp 加入到專案

4. 把 main.cpp 裡的程式碼刪掉, 貼上11行GLUT程式碼

5. 接下來要把 Gundam 模型 (Gundam.mtl Gundam.obj)加進去專案目錄裡的 data 資料夾

6. (歷史餘毒)要把專案的工作執行目錄, 改成小數點

7. 要把 桌面\freeglut\bin\freeglut.dll 複製到專案目錄裡

8. main.cpp 再加入 讀模型的程式碼

```cpp

    #include <GL/glut.h>

    #include "glm.h" ///5-a

    GLMmodel* pmodel = NULL; ///5-b

    void

    drawmodel(void) ///5-c

    {

        if (!pmodel) {

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

        if (!pmodel) exit(0);

        glmUnitize(pmodel);

        glmFacetNormals(pmodel);

        glmVertexNormals(pmodel, 90.0);

    }

        glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);

    }

```

9. data/Al.obj 改成 data/gundam.obj

10. glutSolidTeapot(0.3); 改成 drawmodel();




## week08-2_glm_gundam_opencv_texture

0. 安裝 OpenCV 2.1 記得要 Add PATH, 不要改目錄

1. 關閉重開 CodeBlocks (才會把 PATH 設定好, 存檔!)

2. File-New-project, GLUT專案, wee08-2_glm_gundam_opencv_texture

3. 重做剛剛的 glm.h glm.cpp 放到目錄裡

4. 把 Gundam.mtl Gundam.obj 以及新的 Diffuse.jpg 都放到專案的 data 目錄

5. 在專案, 裡按右鍵 Add File 把 glm.cpp 加入到專案

6. (歷史餘毒)要把專案的工作執行目錄, 改成小數點

7. 要把 桌面\freeglut\bin\freeglut.dll 複製到專案目錄裡

8. 把剛剛的 week08-1_glm_gundam 的程式碼全部拿來用, 並加上貼圖18行程式碼

```cpp

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可

#include <opencv/cv.h>

#include <GL/glut.h>

int myTexture(char * filename)

{

    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖

    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)

    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能

    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID

    glGenTextures(1, &id); /// 產生Generate 貼圖ID

    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);

    return id;

}

```

9. 另外, 在 glutMainLoop(); 前要加入 myTexture("data/Duffuse.jpg");

10. Setting-Complier 要加入 OpenCV 相關的3個設定

    a. compiler 的 include 要加入 C:\OpenCV2.1\include

    b. linker 的 lib 要加入 C:\OpenCV2.1\lib

    c. linker 設定, 要加入 cv210 cxcore210 highgui210


## week08-3_glm_gundam_opencv_texture_lighting

1. File-New-project, GLUT專案, week08-3_glm_gundam_opencv_texture_lighting

2. 把 Gundam.mtl Gundam.obj Diffuse.jpg 都放到專案的 data 目錄

3. 把 glm.h glm.cpp freeglut.dll 放到專案目錄裡

4. (歷史餘毒)要把專案的工作執行目錄, 改成小數點

5.最後在 main.cpp 貼入 week08-2_glm_gundam_opencv_texture 的程式碼

6. 在專案, 裡按右鍵 Add File 把 glm.cpp 加入到專案

7.再加入 week08-8_sample 裡的打光 lighting 程式碼-8行陣列 + 12+2行的函式呼叫




沒有留言:

張貼留言