2021年4月7日 星期三

本人發言不帶表本人立場 Week07

1. 線上互動白板

  • 玩玩看老師寫的程式

2. TEXTRUE.exe

  • 打開執行檔看貼圖的程式碼

3. Install OpenCV

  • 注意:記得選Add OpenCV to the system PATH for all users
  • 安裝完成後才能開CodeBlocks
  • 打開CodeBlocks設定裡的編譯器選項
  • 在Compiler -> Search direction -> Compiler -> 增加目錄 C:\OpenCV2.1\include
  • 再到 Linker 增加目錄 C:\OpenCV2.1\lib

  • 到 Linker settings 增加三個連結

4.開始寫程式

  • 開啟GLUT專案檔 -> 把圖片放在 bin 資料夾
  • 寫程式讀圖片
#include <opencv/highgui.h>
int main()
{
    IplImage*img=cvLoadImage("image.jpg");
    cvShowImage("image.jpg",img);
    cvWaitKey(0);
}

    執行結果: 


  • 複製程式碼
    • 把圖片貼在茶壺上
    • 紅字 : 記得改圖片名
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("one.png"); ///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("week07");
    glutDisplayFunc(display);
    init();
    glutMainLoop();
}

執行結果:




















  • 更改display()
    • 畫出背景圖
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();
    glutSwapBuffers();
}  

    執行結果:



 

沒有留言:

張貼留言

距地表面160 Week11

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