2023年5月11日 星期四

Cid week13

 Step01-1

從github下載並開啟舊專案Final_Project

相對路徑改成絕對路徑
把freeglut整個資料夾複製到專案內



Step01-2
開啟.gitignore用notepad++修改內部程式,註解掉*.a *.lib並儲存


Step02-1
把glm.h和glm.cpp加入到專案內
程式碼
#include <stdio.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head  =NULL;
GLMmodel * body  =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");
        glmUnitize(head);
    }
    glmDraw(head,GLM_MATERIAL);
    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();
}
程式碼
#include <stdio.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head  =NULL;
GLMmodel * body  =NULL;
GLMmodel * uparmR  =NULL;
GLMmodel * LowarmR  =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");
        uparmR = glmReadOBJ("model/uparmR.obj");
        lowarmR = glmReadOBJ("model/lowarmR.obj");
    }
    glPushMatrix();
        glScalef(0.3,0.3 0.3);
        glmDraw(head, GLM_MATERIAL);
        glmDraw(body, GLM_MATERIAL);
        glmDraw(uparmR, GLM_MATERIAL);
        glmDraw(LowarmR, 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();
}


Step03-1
程式碼

#include <stdio.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head  =NULL;
GLMmodel * body  =NULL;
GLMmodel * uparmR  =NULL;
GLMmodel * LowarmR  =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");
        uparmR = glmReadOBJ("model/uparmR.obj");
        lowarmR = glmReadOBJ("model/lowarmR.obj");
    }
    glPushMatrix();
        glScalef(0.3,0.3 0.3);
        glmDraw(head, GLM_MATERIAL);
        glmDraw(body, GLM_MATERIAL);
        glmDraw(uparmR, GLM_MATERIAL);
        glmDraw(LowarmR, 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();
}
Step03-2
程式碼

#include <stdio.h>
#include <GL/glut.h>
#include "glm.h"
GLMmodel * head  =NULL;
GLMmodel * body  =NULL;
GLMmodel * uparmR  =NULL;
GLMmodel * LowarmR  =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");
        uparmR = glmReadOBJ("model/uparmR.obj");
        lowarmR = glmReadOBJ("model/lowarmR.obj");
    }
    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(uparmR,GLM_MATERIAL);
        if(show[3])glmDraw(LowarmR,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();
}
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();
}

沒有留言:

張貼留言