2023年5月10日 星期三

DTang---week13_綜合練習

 week13 - 裁切模型

使用Maya匯入模型後,就需要的肢體部位做分段儲存(使用OBjproject檔)

附註:上課時暫用老師帳號,回家要自己申請帳號


(被切到剩這樣了www)

一共切出這些






Final_Project

feeglut工作目錄不對等的情況的處理

專案==> properties ==> project setting ==> project's build options ==> ...... ==>  C:\Users\Administrator\Desktop\freeglut\include ==> freeglut\include


目錄也要注意,工作執行目錄下必須要放freeglut.dll

讀取obj檔,記得先加入glm.cpp 跟 glm.h兩個檔案((可以從week10複製來用))








.....

#include "glm.h"

GLMmodel * head = NULL;

GLMmodel * body = NULL;

GLMmodel * uparmR = NULL;

GLMmodel * lowarmR = NULL;

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();

}


float teapotx = 0, teapoty = 0;

FILE * fout = NULL;

FILE * fin = NULL;


void display(){

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

    glScaled(0.2,0.2,0.2);

        /// glTranslatef(teapotx, teapoty, 0);

        /// glutSolidTeapot(0.3);

        if(body == NULL){

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

            body = glmReadOBJ("Model/wholebody.obj");

            uparmR = glmReadOBJ("Model/uparmR.obj");

            lowarmR = glmReadOBJ("Model/armhandR.obj");

            ///glmUnitize(body);

        }

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

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

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

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

    glPopMatrix();

    glutSwapBuffers();

}

......(以上為使用鍵盤控制並顯示)



-------------------------------------------------------------------------------------------------------------

加入glTranslatef函式使得手臂能移動
void display(){
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
    glScaled(0.2,0.2,0.2);
        if(body == NULL){
            head = glmReadOBJ("Model/head.obj");
            body = glmReadOBJ("Model/wholebody.obj");
            uparmR = glmReadOBJ("Model/uparmR.obj");
            lowarmR = glmReadOBJ("Model/armhandR.obj");
        }
        if(show[0]) glmDraw(head, GLM_MATERIAL);
        if(show[1]) glmDraw(body, GLM_MATERIAL);
        glPushMatrix();
            glTranslatef(teapotx, teapoty, 0);
            if(show[2]) glmDraw(uparmR, GLM_MATERIAL);
        glPopMatrix();
        if(show[3]) glmDraw(lowarmR, GLM_MATERIAL);
    glPopMatrix();
    glutSwapBuffers();

}
int oldX = 0; int oldY = 0;
void motion(int x , int y){
    teapotx += (x - oldX)/150.0;
    teapoty += (y - oldY)/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){
...

    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
    glutKeyboardFunc(keyboard);
...
}










沒有留言:

張貼留言