2023年5月10日 星期三

翁逸豪 Week13

 使用Maya裁切模型,將選擇的模型部位以 Export Selection 轉 .obj 檔案格式匯出。

匯出的模型部位

下載上週的 Final_Project,在這個資料夾複製 freeglut 這個資料夾

複製freeglut資料夾
CodeBlocks 匯入 Final_Project.cbp,更改部分設定

更改設定I
更改設定II
更改設定III
將剛剛裁切下來的模型複製到 Final_Project 這個資料夾
加入裁切的模型
在Final_Project 這個資料夾加入 glm.cpp 與 glm.h
加入 glm.cpp 與 glm.h
CodeBlocks 匯入 glm.cpp
匯入 glm.cpp

Week13-1

顯示身體的模型

#include "glm.h"

GLMmodel * head = NULL;

GLMmodel * body = NULL;

GLMmodel * uparmL = NULL;

GLMmodel * lowarmL = NULL;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        if(body==NULL)

        {

            body = glmReadOBJ("model/body.obj");

            glmUnitize(body);

        }

        glmDraw(body, GLM_MATERIAL);

    glPopMatrix();

    glutSwapBuffers();

}

新增並更改部分程式

顯示身體

Week13-2

加入頭但是身體太大了

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glScalef(0.2,0.2,0.2);

        if(body==NULL)

        {

            head = glmReadOBJ("model/head.obj");

            body = glmReadOBJ("model/body.obj");

        }

        glmDraw(head, GLM_MATERIAL);

        glmDraw(body, GLM_MATERIAL);

    glPopMatrix();

    glutSwapBuffers();

}

顯示頭與身體

Week13-3

使用鍵盤控制顯示

int show[4]={0,1,0,0};

void keyboard(unsigned char key, int x, int y)

{

    if(key=='0') show[0] = !show[0];

    if(key=='1') show[1] = !show[1];

    if(key=='2') show[2] = !show[2];

    if(key=='3') show[3] = !show[3];

    glutPostRedisplay();

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glScalef(0.2,0.2,0.2);

        if(body==NULL)

        {

            head = glmReadOBJ("model/head.obj");

            body = glmReadOBJ("model/body.obj");

            uparmL = glmReadOBJ("model/uparmL.obj");

            lowarmL = glmReadOBJ("model/lowarmL.obj");

        }

        if(show[0]) glmDraw(head, GLM_MATERIAL);

        if(show[1]) glmDraw(body, GLM_MATERIAL);

        if(show[2]) glmDraw(uparmL, GLM_MATERIAL);

        if(show[3]) glmDraw(lowarmL, GLM_MATERIAL);

    glPopMatrix();

    glutSwapBuffers();

}

加入鍵盤控制顯示的程式

只顯示頭跟左手

Week13-4

滑鼠移動左手

void display()

{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glScalef(0.2,0.2,0.2);

        if(body==NULL)

        {

            head = glmReadOBJ("model/head.obj");

            body = glmReadOBJ("model/body.obj");

            uparmL = glmReadOBJ("model/uparmL.obj");

            lowarmL = glmReadOBJ("model/lowarmL.obj");

        }

        if(show[0]) glmDraw(head, GLM_MATERIAL);

        if(show[1]) glmDraw(body, GLM_MATERIAL);

        glPushMatrix();

            glTranslatef(teapotX,teapotY,0);

            if(show[2]) glmDraw(uparmL, GLM_MATERIAL);

        glPopMatrix();

        if(show[3]) glmDraw(lowarmL, GLM_MATERIAL);

    glPopMatrix();

    glutSwapBuffers();

}

int oldX = 0,oldY = 0;

void motion(int x,int y)

{

    teapotX += (x - oldX)/150.0;

    teapotY -= (y - oldX)/150.0;

    oldX = x;

    oldY = y;

    printf("glTranslatef(%f, %f, 0);\n", teapotX, teapotY);

    glutPostRedisplay();

}

void mouse(int button, int state, int x, int y)

{

    if(state==GLUT_DOWN){

        oldX = x;

        oldY = y;

        angle = x;

    }

    display();

}

int main(int argc, char** argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week12");


    glutDisplayFunc(display);

    glutMouseFunc(mouse);

    glutMotionFunc(motion);

    glutKeyboardFunc(keyboard);


    glutMainLoop();

}

移動滑鼠使左手跟著移動並顯示移動位置

移動並顯示位置


沒有留言:

張貼留言