2023年5月11日 星期四

jason week13

 1-1

git clone 下來把檔案複製下來,再去codeblocks的properties更改



freeglut的檔案移動到final project裡,lib的名字更改

1-2

去gitignore把lib a註解掉,存檔之後,codeblocks也要save everything

1-3

git hub上傳add week13

2-1




用MAYA去選取部位

2-2


新增檔案add file - glm.cpp,新增上圖的程式碼

2-3

 再增加身體 手
#include<stdio.h>
#include<GL/glut.h>
#include "glm.h"

GLMmodel * head = NULL;
GLMmodel * body = NULL;
GLMmodel * ruparmR = NULL;
GLMmodel * rlowarmR = 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");
        body =glmReadOBJ("model/body.obj");
        ruparmR =glmReadOBJ("model/ruparm.obj");
        rlowarmR =glmReadOBJ("model/rlowarm.obj");
        ///glmUnitize(head);
    }
    glPushMatrix();
        glScalef(0.3,0.3,0.3);
        glmDraw(head,GLM_MATERIAL);
        glmDraw(body,GLM_MATERIAL);
        glmDraw(ruparmR,GLM_MATERIAL);
        glmDraw(rlowarmR,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){
        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)
{
    if(fin==NULL){
        fclose(fout);
        fin=fopen("file4.txt","r");
    }
    fscanf(fin,"%f%f",&teapotX,&teapotY);
    display();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);

    glutMainLoop();
}

3-1

註解原本的keyboard函式,新增程式碼

#include<stdio.h>
#include<GL/glut.h>
#include "glm.h"

GLMmodel * head = NULL;
GLMmodel * body = NULL;
GLMmodel * ruparmR = NULL;
GLMmodel * rlowarmR = NULL;
int show[4]={1,0,0,0};

float teapotX=0,teapotY=0;
FILE * fout =NULL;
FILE * fin=NULL;
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);
    if(head==NULL){
        head =glmReadOBJ("model/head.obj");
        body =glmReadOBJ("model/body.obj");
        ruparmR =glmReadOBJ("model/ruparm.obj");
        rlowarmR =glmReadOBJ("model/rlowarm.obj");
        ///glmUnitize(head);
    }
    glPushMatrix();
        glScalef(0.3,0.3,0.3);
        if (show[0])glmDraw(head,GLM_MATERIAL);
        if (show[1])glmDraw(body,GLM_MATERIAL);
        if (show[2])glmDraw(ruparmR,GLM_MATERIAL);
        if (show[3])glmDraw(rlowarmR,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){
        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)
{
    if(fin==NULL){
        fclose(fout);
        fin=fopen("file4.txt","r");
    }
    fscanf(fin,"%f%f",&teapotX,&teapotY);
    display();
}*/
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12");

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);

    glutMainLoop();
}

3-2

增加translatef可以移動頭部,motion函式
#include<stdio.h>
#include<GL/glut.h>
#include "glm.h"

GLMmodel * head = NULL;
GLMmodel * body = NULL;
GLMmodel * ruparmR = NULL;
GLMmodel * rlowarmR = NULL;
int show[4]={1,0,0,0};

float teapotX=0,teapotY=0;
FILE * fout =NULL;
FILE * fin=NULL;
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);
    if(head==NULL){
        head =glmReadOBJ("model/head.obj");
        body =glmReadOBJ("model/body.obj");
        ruparmR =glmReadOBJ("model/ruparm.obj");
        rlowarmR =glmReadOBJ("model/rlowarm.obj");
        ///glmUnitize(head);
    }
    glPushMatrix();
        glScalef(0.3,0.3,0.3);
        glPushMatrix();
        glTranslatef(teapotX,teapotY,0);
        if (show[0])glmDraw(head,GLM_MATERIAL);
        glPopMatrix();
        if (show[1])glmDraw(body,GLM_MATERIAL);
        if (show[2])glmDraw(ruparmR,GLM_MATERIAL);
        if (show[3])glmDraw(rlowarmR,GLM_MATERIAL);
    glPopMatrix();
    glutSwapBuffers();
}
int oldX=0, oldY=0;
void mouse(int button,int state,int x,int y)
{
    if(state ==GLUT_DOWN){
        oldX=x;
        oldY=y;
    }
}
void motion(int x,int y){
    teapotX+=(x-oldX)/150.0;
    teapotY-=(y-oldY)/150.0;
    oldX=x;
    oldY=y;
    glutPostRedisplay();
}

int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12");
    glutMotionFunc(motion);
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);

    glutMainLoop();
}


沒有留言:

張貼留言