電腦圖學_week08
2021/04/12(一)
今日的上課內容:
- 下載下載moodle的程式
- 安裝路徑(圖一)
- 將檔案放入編譯器中
- 檔案和圖片放同一個地方(圖二)
- 成果(圖三)
- 改成用新專案放剛剛的程式(圖四)
- 把圖貼在茶壺上(圖五)
- 在背景放入圖片與茶壺融合(圖六)
今日的程式碼:
////畫出圖形
- #include <opencv/highgui.h>
- int main()
- {
- IplImage * img = cvLoadImage("0412.jpg");
- cvShowImage("week08", img);
- cvWaitKey(0);
- }
////把圖貼在茶壺上
- #include <opencv/highgui.h>
- #include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
- #include <opencv/cv.h>
- #include <GL/glut.h>
- void init()
- {
- IplImage * img = cvLoadImage("0412.jpg"); ///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);
- } ///最後一行最難/最重要, 所貼圖影像的資料都設定好
- void display()
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glutSolidTeapot(0.3);
- glutSwapBuffers();
- }
- int main(int argc,char ** argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("week08 texture");
- init();
- glutDisplayFunc(display);
- glutMainLoop();
- }
////合併背景與茶壺
- #include <opencv/highgui.h>
- #include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
- #include <opencv/cv.h>
- #include <GL/glut.h>
- void init()
- {
- IplImage * img = cvLoadImage("0412.jpg"); ///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);
- } ///最後一行最難/最重要, 所貼圖影像的資料都設定好
- void display()
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glBegin(GL_POLYGON);
- glTexCoord2f(0, 1); glVertex3f(-1,-1,0);
- glTexCoord2f(1, 1); glVertex3f(+1,-1,0);
- glTexCoord2f(1, 0); glVertex3f(+1,+1,0);
- glTexCoord2f(0, 0); glVertex3f(-1,+1,0);
- glEnd();
- glutSolidTeapot(0.3);
- glutSwapBuffers();
- }
- int main(int argc,char ** argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("week08 texture");
- init();
- glutDisplayFunc(display);
- glutMainLoop();
- }
今日的成果:
⬆️圖一
⬆️圖二
⬆️圖五






沒有留言:
張貼留言