#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.執行畫面
沒有留言:
張貼留言