2023年5月11日 星期四

咻碰閃week13

 week13

1-1 先安裝git,下載上週Final_project,開啟上週專案,將絕對路徑改成相對路徑,之後不用再裝freeglut

1-2 freeglut移到專案資料夾裡,打開.gitignore註解掉.dll、.a、.lib(加#)
都設定好後檔案執行成功



2-1 https://jsyeh.org/3dcg10/ 下載data 在Maya匯入al.obj


2-2 裁切頭、身體、手臂、腳,分開匯出,放進新資料夾model裡


2-3 複製第10週 glm.h、glm.cpp檔至Final_project
新增glm.cpp到專案裡


2-4 修改程式碼
#include <stdio.h> ///要檔案的Input/Output
#include <GL/glut.h>
#include "glm.h"///week13_step02-2
GLMmodel * head = NULL;///week13_step02-2
GLMmodel * body = NULL;///week13_step02-2
GLMmodel * uparmR = NULL;
GLMmodel * lowarmR = NULL;
GLMmodel * uparmL = NULL;
GLMmodel * lowarmL = NULL;
GLMmodel * uplegR = NULL;
GLMmodel * lowlegR = NULL;
GLMmodel * uplegL = NULL;
GLMmodel * lowlegL = NULL;

float teapotX = 0, teapotY = 0;
FILE * fout = NULL;
FILE * fin = NULL;

void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    if(head==NULL){
        head = glmReadOBJ("model/head.obj");///week13_step02-2
        body = glmReadOBJ("model/body.obj");
        uparmR = glmReadOBJ("model/uparmR.obj");
        lowarmR = glmReadOBJ("model/lowarmR.obj");
        uparmL = glmReadOBJ("model/uparmL.obj");
        lowarmL = glmReadOBJ("model/lowarmL.obj");
        uplegR = glmReadOBJ("model/uplegR.obj");
        lowlegR = glmReadOBJ("model/lowlegR.obj");
        uplegL = glmReadOBJ("model/uplegL.obj");
        lowlegL = glmReadOBJ("model/lowlegL.obj");
        ///glmUnitize(head);///week13_step02-2 之後會改
        ///glmUnitize(body);
    }///week13_step02-2
    glPushMatrix();
        glScalef(0.3,0.3,0.3);///week13_step02-3
        glmDraw(head,GLM_MATERIAL);///week13_step02-3
        glmDraw(body, GLM_MATERIAL);///week13_step02-2
        glmDraw(uparmR,GLM_MATERIAL);///week13_step02-3
        glmDraw(lowarmR,GLM_MATERIAL);///week13_step02-3
        glmDraw(uparmL,GLM_MATERIAL);
        glmDraw(lowarmL,GLM_MATERIAL);
        glmDraw(uplegR,GLM_MATERIAL);
        glmDraw(lowlegR,GLM_MATERIAL);
        glmDraw(uplegL,GLM_MATERIAL);
        glmDraw(lowlegL,GLM_MATERIAL);
    glPopMatrix();
    glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
    teapotX = (x-150)/150.0;
    teapotY = (150-y)/150.0;
    if(state==GLUT_DOWN){ ///如果mouse按下去
        if(fout==NULL) fout = fopen("file4.txt", "w");

        fprintf(fout, "%f %f\n", teapotX, teapotY);
    }
    display();
}
void keyboard(unsigned char key, int x, int y)///step02-2
{
    if(fin==NULL){
        fclose(fout);///step02-2
        fin = fopen("file4.txt", "r");///step02-2
    }
    fscanf(fin, "%f%f", &teapotX, &teapotY);///step02-2
    display();///step02-2
}///step02-2
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard); ///step02-2
    glutMouseFunc(mouse); ///step02-1

    glutMainLoop();
}















沒有留言:

張貼留言