2024年3月18日 星期一

阿哲 week05

 #week05

##OpenCV 安裝

1.桌面\葉正聖老師上課用軟體\OpenCV-2.1.0-win32-vs2008.exe

2.小心1:Add OpenCV to ...PATH

3.小心2: 要安裝在預設 C\OpenCV2.1 目錄裡

4.請安裝完後,重開CodeBlocks

5.設定 Settings-Compiler 要加入3個設定

5.1search 目錄 Compiler 的include 目錄裡 加 C:\OpenCV2.1\include

5.2 search 目錄 Linker 的 link 目錄 加C:\OpenCV2.1\lib

5.3 加入 Linker 的 3個檔名 cv210 cxcore210 highgui210

##week05-1_texture_opencv_cvLoadimage

#include <GL/glut.h>

#include <opencv/highgui.h>

void display() {

    glutSolidTeapot( 0.3 );

    glutSwapBuffers();

}

int main(int argc, char* argv[])

{

    IplImage * img = cvLoadImage("C:/cat.jpg");

    cvShowImage("opencv", img);

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week05-1 texture opencv");

    glutDisplayFunc(display);

    glutMainLoop();

}



#week05-2_texture_teapot_earth

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

#include <opencv/cv.h>

#include <GL/glut.h>

int myTexture(char * filename)

{

    IplImage * img = cvLoadImage(filename); ///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);

    return id;

}

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("week09 texture");


    glutDisplayFunc(display);

    myTexture("c:/earth.jpg");///去下載earth map 地圖


    glutMainLoop();

}

#week05-3_texture)polygon
    貼上05-2的程式碼 加上四行
glBegin(GL_POLYGON)
    glTexCoord2d(0,0); glVertex2f(-1,-1);
    glTexCoord2d(1,0); glVertex2f(+1,-1);
    glTexCoord2d(1,1); glVertex2f(+1,+1);
    glTexCoord2d(0,1); glVertex2f(-1,+1);
     glEnd()

#week05-4_rotatin-earth
1.google:earth map 找圖片,滿版的地圖,存C:earth.jpg
2.File-week-05_rotateing_earth
3.把week05_opencv_opengl_myTexture拿來用
4.加上指標 GLUquadric * quad;
5.在main() 的glutmainLoop()之前,加2行quad = gluNewQuadric();
6.在display()裡,把glutSoildTeapot(0.3);

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

#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); ///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);
    return id;
}
float angle = 0; ///要有個旋轉的角度
GLUquadric * quad = NULL;
void display()
{
    glEnable(GL_DEPTH_TEST); ///開啟 3D 的功能(深度測試)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glPushMatrix();
        glRotatef(90, 1, 0, 0);
        glRotatef(angle++, 0, 0, 1);
        gluSphere(quad, 1, 30, 30); /// glutSolidTeapot( 0.3 );
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09 texture");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    quad = gluNewQuadric();
    myTexture("c:/earth.jpg");///去下載earth map 地圖
    gluQuadricTexture(quad, 1);
    glutMainLoop();
}

沒有留言:

張貼留言