2023年3月30日 星期四

Fafa的奇妙冒險

 Week 07

Week07-1.1

Step 1:先到 3D圖學 下載 data win32

Step 2:data.zip windows.zip 解壓縮並將 data資料夾 拉進 windows資料夾


Step 3:打開 Texture.exe ,觀察其程式碼與相互關係






Week 07-1.2




Week 07-2.1 圖檔讀取


Step 1:先下載 OpenCV-2.1.0,並在Install Options介面,點選 Add OpemCV to the system Path for                current user








Step 2:打開Codeblock,並點選Setting-Compiler




Step 3:先點選Search directories,選擇Compiler,並按Add 輸入:C:\OpenCV2.1\include




Step 4:選擇Linker,並Add輸入:C:\OpenCV2.1\lib





Step 5:回到上方的Linker settings,在Link libraries框Addcv210cxcore210highgui210





Step 6:開啟新專案,並輸入程式碼

程式碼:
#include<opencv/highgui.h>
int main()
{
    IplImage * img = cvLoadImage("image.jpg");
    cvShowImage("week07",img);
    cvWaitKey(0);
}


Step 7:從網路上下載圖檔注意:圖檔位置必須與此程式檔在同一位置,並且圖檔名稱必須                   與cvLoadIamge()中的名稱相符

Step 8:觀察執行結果,完成!



Week07-2.2


Step 1:開啟一個GLUT project

Step 2:複製下列程式碼進GLUT projcet

程式碼:
#include <opencv/highgui.h> 
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename); 
    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);
    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("week07 texture");

    glutDisplayFunc(display);
    myTexture("Earth.jpg");

    glutMainLoop();
}

Step 3:把earth圖檔複製進freeglut/bin/,並改名為:Earth.jpg

Step 4:執行程式,可發現茶壺的材質被改成了Earth.jpg的圖檔




Week 07-3.1

Step 1:建立GLUT projcet

Step 2:複製下列程式碼並取代原本程式碼

程式碼:

#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);///讀取圖檔
    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);
    return id;
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
        glTexCoord2f(0,0);glVertex2f(-1,+1);
        glTexCoord2f(1,0);glVertex2f(+1,+1);
        glTexCoord2f(1,1);glVertex2f(+1,-1);
        glTexCoord2f(0,1);glVertex2f(-1,-1);
    glEnd();
    glutSolidTeapot( 0.3 );
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week07 texture");

    glutDisplayFunc(display);
    myTexture("earth.jpg");

    glutMainLoop();
}

Step 3:要記得:freeglut/bin/中必須要有Earth.jpg

Step 4:觀察並執行程式執行結果,完成!




Week 07-3.2

Step 1:建立GLUT project




Step 2:取代原本程式碼,改為下列程式碼:
程式碼:
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * sphere = NULL;
int myTexture(char * filename)
{
    IplImage * img = cvLoadImage(filename);
    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);
    return id;
}
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle, 0,-1,0);
        glRotatef(90, 1,0,0);
        gluQuadricTexture(sphere, 1);
        gluSphere(sphere, 1, 30, 30);
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10 texture background");

    glutIdleFunc(display);
    glutDisplayFunc(display);
    myTexture("Earth.jpg");
    sphere = gluNewQuadric();
    glEnable(GL_DEPTH_TEST);

    glutMainLoop();
}


Step 3:將圖檔下載並改為 myEarth.jpg


Step 4:執行程式,並觀察執行結果,完成!









沒有留言:

張貼留言