2022年5月3日 星期二

(圖學筆記)電腦圖學Week11

Week11

## step01-1

持續實作 glm 模型相關練習: OpenCV讀圖

1.安裝opencv2.1

#include <opencv/highgui.h>

int main()

{

IplImage * img = cvLoadImage( "data/Diffuse.jpg" );

cvShowImage("week11", img);

}

## step01-2

持續實作 glm 模型相關練習: 把茶壼貼上Gundam的貼圖

1. 複製上週的程式

#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("week11 gundam");

    glutDisplayFunc(display);

    myTexture("data/Diffuse.jpg");

    glutMainLoop();

}


step02-1

持續實作 glm 模型相關練習: 把模型 讀進來, 畫出來

1. 在 jsyeh.org/3dcg10 下載 source.zip

2. 把 glm.c 改檔名成 glm.cpp  把 glm.h glm.cpp 放到 week11

3. 在 week11_gundam  Add Files 加入 glm.cpp 

4. 加入程式碼 

5. main.cpp 在前面 include 2行

6. display() 裡 加入好多行


#include "glm.h"

GLMmodel * pmodel = NULL; 

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    ///glutSolidTeapot( 0.3 );

    if( pmodel == NULL ){ 

        pmodel = glmReadOBJ("data/Gundam.obj"); 

        glmUnitize( pmodel ); 

        glmFacetNormals( pmodel ); 

        glmVertexNormals( pmodel , 90 ); 

    }

    glmDraw( pmodel, GLM_TEXTURE ); 

    glutSwapBuffers();

}

```



step02-2

發現問題:

1. 貼圖上下倒過來 身體是藍色,腳是白色

2. 所以,把 data\Diffuse.jpg 用小畫家改一下

step03-1

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);


    if( pmodel == NULL ){ 

        pmodel = glmReadOBJ("data/head.obj"); 

        glmUnitize( pmodel ); 

        glmFacetNormals( pmodel );

        glmVertexNormals( pmodel , 90 );

    }

    glPushMatrix();

        glRotatef(angle, 0,1,0);

        glmDraw( pmodel, GLM_TEXTURE ); 

    glPopMatrix();

    glutSwapBuffers();

    angle += 1;

}

step03-2

#include <GL/glut.h>

void hand(){

    glColor3f(0,1,0);

    glutSolidTeapot( 0.2 );

}

void body(){

    glColor3f(1,1,0);

    glutSolidTeapot( 0.3 );

}

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    body();

    glPushMatrix();

        glTranslatef(0.5, 0.2, 0);

        glRotatef(angle, 0,0,1);

        glTranslatef(0.3, 0, 0);

        hand();

    glPopMatrix();

    glutSwapBuffers();

    angle++;

}

int main(int argc, char**argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week11 TRT");

    glutIdleFunc( display );

    glutDisplayFunc( display );

    glutMainLoop();

}


沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...