2022年5月2日 星期一

ander week11筆記

 建立week11的glut檔案.

第一步myGundam.zip  的data 檔 放到freeglut/bin
第二步 Computer Graphics (jsyeh.org) 裡的 source檔案下載 再把 glm.c (把它改成.cpp) 以及 glm.h 丟到 week11的專案檔案內.



step01-2
寫程式,先複習第09過的程式(貼圖)
1• 貼上你的程式
2•配上你的咒語,只要寫
一次就好
3.咒語 setting-Compiler-search directories: compiler include 目錄 C:1opencv2
•咒語 Setting-compiler-Search directories: Linker 1ib目錄C:1opencv2 .111ib
5.
咒語 Setting-compiler-Iinkez:
cv210 cxcore210 highgui210
6. 執行可成功,代表:(1) openCv的咒語設對了,(2)PATE 也對了,(3)你的 gundam
CPP
#include
‹opencv/highgui.h›
int main )
fplImage * img
= cvLoadImage ("data/Diffuse. jpg") ;
cvShow Image ("week11”
ima) ;
cvWaitKey (0);//等任薏鍵
                                  


```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;
}  

```c
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if(pmodel == NULL){
        pmodel = glmReadOBJ("data/gundam.obj");    ///讀入模型
        glmUnitize(pmodel);    ///把模型pmodel 調整成單位大小-1.....+1
        glmFacetNormals(pmodel);    ///把Facet面的法向量Normals算出來
        glmVertexNormals(pmodel,90);    ///把Vertex法向量,用面平均算出來
    }
    glmDraw(pmodel,GLM_TEXTURE);
glutSwapBuffers();
```



3.利用小畫家將freeglut\bin\data目錄中的diffuse.jpg圖檔上下垂直翻轉
4.在glutMainLoop()之前(可以讀圖,可以myTexture(),可以打光,可以做很多設定)加glEnable(GL_DEPTH_TEST)開啟3D深度測試功能,讓近的蓋掉遠的才是真3D。印出來的圖是背面狀態
5.使3d模型轉起來,程式碼如下:
float angle=0;
glPushMatrix();
    glRotatef(angle,0,1,0);
glPupMatrix();
ansgle+=1;

上面老師紅色字上課特別提醒有問問題的程式碼

加入glutIdleFunc(display); 有空就畫



沒有留言:

張貼留言