2015年4月29日 星期三

Week10_02161052_葉采晴


目標!!!
1. 複習期中考週前的NeHe Lesson 32
2. OpenCV 2.1 開圖檔複習 (及設定, include .h檔, link .lib檔, 執行時 .dll檔)
3. OpenGL 的專案設定
4. 設定貼圖的幾個觀念


利用opencv在進行設定
產生圖片
以利之後要做的貼圖

設定繁瑣 要好多好多耐心




產生旋轉的茶壺以及圖片
(可以同時產生2D以及3D的畫面)

#include <iostream>
#include <opencv/highgui.h>
#include <GL/glut.h>
using namespace std;
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glFlush();
    angle+=0.1;
}
int main(int argc,char**argv)
{
    IplImage * img =cvLoadImage("image.jpg");
    cvNamedWindow("2D");
    cvShowImage("2D",img);
    cvWaitKey(1);

    glutInit(&argc,argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();
}




讓圖片貼在茶壺上面
YA!


#include <opencv/highgui.h>                                 ///for cvLoadImage()
#include <opencv/cv.h>                                          ///for cvCvtColor()
#include <GL/glut.h>                         ///3D glut
float angle=0;                                     ///自動轉很帥
void display()
{   glEnable(GL_DEPTH_TEST);                ///要啟動 Detph Test 深度值的測試,3D顯示才正確
    glClear(GL_COLOR_BUFFER_BIT  | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();                                         ///自動轉很帥
        glRotatef(angle, 0,1,0);                        ///自動轉很帥
        glutSolidTeapot(0.3);
    glPopMatrix();                                         ///自動轉很帥
    glFlush();
    angle+=0.1;                                              ///自動轉很帥
}
void myInit()
{   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);
}                                      ///最後一行最難/最重要, 所有貼圖影像的資料都設定好
int main(int argc, char**argv)
{   glutInit(&argc, argv);
    glutCreateWindow("3D");
    glutDisplayFunc(display);                            ///顯示
    glutIdleFunc(display);                                  ///自動轉很帥 (閒閒沒事幹, 就重畫)
    myInit();                                                        ///我的 init 初始化 把貼圖準備好 前面OpenCV 2行, 後面 OpenGL 9行
    glutMainLoop();
}






沒有留言:

張貼留言