(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
沒有留言:
張貼留言