2024年4月11日 星期四

Han Week08

 #Week08

##期中模擬練習






##下載課本範例

https://jsyeh.org/3dcg10/

source ,data,win32

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

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

-Al.obj 裡面很多內容

- #代表註解

- 可以再引用另一個mtl檔

- V代表頂點 後面有座標 x,y,z

- f 代表面face 或 facet 後面有頂點的編號

- g 代表 group


##week08-0_sample

0.安裝freeglut,把lib\libfreeglut.a複製成libglut32.a

1.File-New-Project,GLUT專案week08-0_sample


##week08-1_glm_gundam

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

2.把source.zip裡面的glm.h glm.c都複製到你的專案資料夾並把glm.c改檔名->glm.cpp

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

4.把main.cpp裡,改成11行GLUT的簡單程式

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

5.(歷史餘毒)要把專安的工作執行目錄換成小數點

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

7.main.cpp再加入 讀模型的程式碼(上上週寫過)

```cpp

#include "glm.h"

GLMmodel * pmodel = NULL;

void drawmodel(void)

{

    if (!pmodel) {

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

if (!pmodel) exit(0);

glmUnitize(pmodel);

glmFacetNormals(pmodel);

glmVertexNormals(pmodel, 90.0);

    }


    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);

}

```

pmodel = glmReadOBJ("data/porsche.obj");=改為pmodel = glmReadOBJ("data/Gundam.obj");

glutSolidTeapot(0.3);=>改為 drawmodel();///



##week08-2_glm_gundam_opencv_texture
0.安裝opencv2.1記得要Add PATH不要改目錄
1.關閉重開CodeBlocks (才會把PATH設定設好。要記得存檔)
2.File-New-Project,GLUT專案week08-2_glm_gundam_opencv_texture
3.重作剛剛的glm.h glm.cpp 放到目錄裡。把Gundam.obj Gundam.mtl及新的Diffuse.jpg都放到專案data目錄裡
4.在專案裡,按右鍵Add Files把glm.cpp加入專案
5.
(歷史餘毒)要把專安的工作執行目錄換成小數點
6.要把 桌面\freeglut\bin\freeglut.dll複製到專案目錄裡
7.把剛剛week08-1_glm_gundam的程式全部拿來用再加上新的程式碼
```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;
}
```
另外在glutMaininLoop();要加入
```cpp
      myTexture("data/Diffuse.jpg");
      glutMAinLoop();
}
```
8.Setting-Complier要加入Opencv相關的3個設定
-complier的include要加入C:\Opencv2.1\include
-linker的lib要加入C:Opencv2.1\lib
-linker設定,要加入cv210 cxcore210 highgui210
9.改一下glmDraw(pmodel,GLM_SMOOTH | GLM_MATERIAL|GLM_TEXTURE);
10.執行畫面

##week08-3_glm_gundam_opencv_texture_lighting
1.File-New-Project,GLUT專案week08-3_glm_gundam_opencv_texture_lighting
2.在專案目錄裡,加入data目錄,裡面有Gundam.obj Gundam.mtl Diffuse.jpg三個檔案
3.在專案目錄裡,加入glm.h glm.cpp freeglut.dll三個檔案
4.專案設定 左邊 右鍵-最下面Propeties跳出來的第二頁工作執行目錄 executable working directory 設成小數點
5.專案右鍵-Add File 加入glm.cpp
5.最後在main.cpp裡貼上week08-2_glm_gundam_opencv_texture的程式碼
6.再加入week08-0sample裡的打光lighting程式碼8行陣列+12+2行函式呼叫
7.執行畫面




沒有留言:

張貼留言