# 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



沒有留言:
張貼留言