2015年5月7日 星期四

02160234_洪振瑋_week11

今日目標
(1)Timer計時器
(2)多個貼圖
(3)作業:小遊戲
(4)總結整體觀念


1.
今天教新的程式碼
新增計時器

void timer(int t)
{
    glutTimerFunc(10, timer, 0);
    angle += 1;
    glutPostRedisplay();

}

不管視窗大小都不會影響茶壺旋轉速度

glutTimerFunc(100, timer, 0);




2.把上禮拜的旋轉地球+這禮拜的Timer 合併
讓地球不管視窗大小旋轉速度都一樣!!!!


3.重要重要!!!!
   新增兩種 點擊滑鼠地球互換

滑鼠點擊函式
 GLuint id;   ///unsigned int 整數, 要存你的貼圖ID
GLuint id2;  ///unsigned int 整數, 要存你的貼圖ID
void mouse (int button, int state, int x, int y)
{
    if(state == GLUT_UP) {glBindTexture(GL_TEXTURE_2D, id);}
    else if(state == GLUT_DOWN) {glBindTexture(GL_TEXTURE_2D, id2);}
}


簡化程式碼
把原本複雜的程式碼加到函式中
讓之後加更多圖片可以不用再那麼複雜要一直複製貼上


int mytexture (char *filename)
{
    IplImage * img = cvLoadImage(filename); 
    ///讀圖檔
    cvCvtColor(img, img, CV_BGR2RGB);
    /// ConVerT Color 把圖 BGR 變成 RGB
    glEnable(GL_TEXTURE_2D); 
    ///開啟 2D貼圖功能
    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); 
     ///參數設定 貼圖 S軸 如果超過了, 就REPEAT
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    ///參數設定 貼圖 T軸 如果超過了, 就REPEAT
    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;
}



OPEN CV安裝檔:
https://drive.google.com/open?id=0B5wRRd2CiTemb0Q1dUVIOGx6ZWs&authuser=0

第二部分程式碼:
https://drive.google.com/open?id=0B5wRRd2CiTemb0Q1dUVIOGx6ZWs&authuser=0

第三部分程式碼:
https://drive.google.com/open?id=0B5wRRd2CiTemNnN3OHV5NEZUczQ&authuser=0

沒有留言:

張貼留言