2021年4月7日 星期三

有點睏今天

 


=========================================================================

  • 今天第一個教的東西是個貼圖程式

長這樣:




  • 下載moolde裡的OPENCV







  • 打開Codeblocks-setting-compiler


  • 不可打錯!!  cv210   cxcore210   highgui210
  • 先找個圖儲存在freeglut-bin

       (我命他為 hw)



程式碼 :

#include <opencv/highgui.h> int main(int argc,char** argv) {///小心大小寫 IplImage* img = cvLoadImage("圖檔.jpg"); cvShowImage("圖檔 photo",img); cvWaitKey(0);///等待任意鍵,才會繼續 }






=========================================================================

第二階段要把圖貼到茶壺上面




  • 先去https://hackmd.io/@jsyeh/opengl
  • 複製程式碼


  • 再去把茶壺加上去


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("08160830"); glutDisplayFunc(display); init(); glutMainLoop(); }











全部程式碼:


#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可 #include <opencv/cv.h> #include <GL/glut.h> void init() { IplImage * img = cvLoadImage("hw.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("08160830"); glutDisplayFunc(display); init(); glutMainLoop(); }


======================================================================

  • 現在要把背景貼上去
  • 加上這幾行程式碼



  • 因為呈現的圖示顛倒地所以我們改 Y軸

  • 再加上剛剛的茶壺

程式碼:
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可 #include <opencv/cv.h> #include <GL/glut.h> void init() { IplImage * img = cvLoadImage("hw.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); glVertex2f(-1,-1); glTexCoord2f(1,1); glVertex2f(+1,-1); glTexCoord2f(1,0); glVertex2f(+1,+1); glTexCoord2f(0,0); glVertex2f(-1,+1); glEnd(); glutSolidTeapot(0.3); glutSwapBuffers(); } int main(int argc,char** argv) { glutInit(&argc ,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160830"); glutDisplayFunc(display); init(); glutMainLoop(); }







沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...