2020年4月8日 星期三

(*^ω^*) 喵~Week07

➽ 防疫期間 Teams遠距上課
  • 登入 Microsoft office : ms1.mcu.edu.tw
    • 帳號:學號@ms1.mcu.edu.tw
    • 密碼:學號後四碼+西元出生年月日(預設)
      • 忘記密碼要去 www1.mcu.edu.tw 申請,千萬不可以點 [忘記密碼]
    登入後畫面
  • 進入Teams >> 點擊團隊 >>加入電腦圖學 >> 加入課程
Teams 畫面
上課畫面
➽ OpenCV
  • 照著安裝 >> 要選 Add OpenCV to the PATH
    • 記得 CodeBlocks 要先關掉

  • 安裝完成後開啟 CodeBlocks
  • 設定
  • 打上程式碼
    • #include <opencv/highgui.h>///high高級的 gui使用者介面
    • int main()
    • {
    •     IplImage * img=cvLoadImage("a.jpg");///讀入圖檔
    •     cvNamedWindow("week07");///開視窗
    •     cvShowImage("week07", img);
    •     cvWaitKey(0);///等你按鍵繼續
    • 執行結果
    • }
➽ 貼圖 Texture(期中會考)
  • 網址:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
  • 下載 [data][win32][glut32.dll] 三個檔案
  • [windows]解壓縮>>開啟[windows]資料夾>>將[data]壓縮裡的資料夾和[glut32.dll]拉入[windows]資料夾
  • 開啟 Texture.exe
➷➷自己動手試試看
  • 同之前先下載freegult>>將lib裡的libfreeglut.a複製一份並改名libglut32.a
  • 開啟Codeblocks>>開啟new project>>OpenGL
  • freegult>>bin>>放入一張圖片命名為 image.jpg (此為世界地圖)
  • OpenCV 2.1 要設定好!!!
  • 貼上老師給的程式碼
    • #include <opencv/highgui.h> ///for cvLoadImage()
    • #include <opencv/cv.h> ///for cvCvtColor()
    • #include <GL/glut.h> ///3D glut
    • #include <stdio.h>
    • float angle=0; ///自動轉很帥
    • GLUquadric * quad;
    • void display()
    • {   glEnable(GL_DEPTH_TEST); ///要啟動 Detph Test 深度值的測試,3D顯示才正確
    •     glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
    •     glPushMatrix();///自動轉很帥
    •         glRotatef(90, 1,0,0);
    •         glRotatef(angle, 0,0,1);///自動轉很帥
    •         gluQuadricTexture(quad, 1);
    •         gluSphere(quad, 1, 30, 30);///glutSolidTeapot(0.3);
    •     glPopMatrix();///自動轉很帥
    •     glFlush();
    •     angle+=1;///自動轉很帥
    • }
    • void myInit()
    • {///圖檔要準備好,放在 in ... 的目錄
    • /// C:\Users\Administrator\Desktop\freeglut\bin
    •     quad = gluNewQuadric();
    •     IplImage * img = cvLoadImage("image.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 timer(int t)
    • {/// 1000 msec   50fps:20msec
    •     glutTimerFunc(20, timer, 0);
    •     //printf("timer now\n");
    •     glutPostRedisplay();
    • }
    • int main(int argc, char**argv)
    • {   glutInit(&argc, argv);
    •     glutCreateWindow("3D");
    •     glutDisplayFunc(display); ///顯示
    •     //glutIdleFunc(display);///自動轉很帥 (閒閒沒事幹, 就重畫)
    •     glutTimerFunc(0, timer, 0);

    •     myInit(); ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
    •     glutMainLoop();
    • }
    • 執行結果

沒有留言:

張貼留言