2021年4月7日 星期三

chjyuʕ •ᴥ•ʔ week07 貼圖

 1.互動式小遊戲

網址:https://openprocessing.org/sketch/1157158



2.Texture

Moddle安裝OpenCV,需勾選(Add OpenCV to the system for all user)

下載後再打開CodeBlocks

步驟如下:


(1)Search directories新增:
  •  Compiler:  C:\OpenCV2.1\include
  •  Linker: C:\OpenCV2.1\lib
(2)Linker settings新增:
  •  cv210  ,cxcore210  ,highgui210













(3)CodeBlocks:freeglut

找一張圖片,存在freeglut/bin

程式碼:

#include <opencv/highgui.h>

int main(int argc, char**grav)

{///大寫I小寫pl大寫I

    IplImage*img = cvLoadImage("bear.jpg");

    cvShowImage("bear photo", img);

    cvWaitKey(0);

}

執行結果:












(4)圖片放到茶壺上

程式碼:

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可

#include <opencv/cv.h>

#include <GL/glut.h>

void init()

{

    IplImage * img = cvLoadImage("bear.jpg");

 ///讀圖/記得改圖片名

    cvCvtColor(img,img, CV_BGR2RGB); 

///換顏色

    glEnable(GL_TEXTURE_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); 

// 貼圖參數, 超過包裝的範圖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 texture");

    glutDisplayFunc(display);

    init();///設好後,才設定貼圖到opengl上

    glutMainLoop();

}

執行結果:










(5)背景貼圖

程式碼:

#include <opencv/highgui.h> 

#include <opencv/cv.h>

#include <GL/glut.h>

void init()

{

    IplImage * img = cvLoadImage("bear.jpg");

    cvCvtColor(img,img, CV_BGR2RGB);

    glEnable(GL_TEXTURE_2D);

    GLuint id; 

    glGenTextures(1, &id); 

    glBindTexture(GL_TEXTURE_2D, id); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_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);

}   


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();

}

int main(int argc, char**argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week07 texture");

    glutDisplayFunc(display);

    init();

    glutMainLoop();

}

執行結果:(我把茶壺刪掉了)


沒有留言:

張貼留言

距地表面160 Week11

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