2019年5月16日 星期四

06160150_蔡宗芸 W13

電腦圖學 2019-05-16 Week13

(1).主題 : 檔案

(2).主題 : 關節, 擺動作

(3).主題 : 複習

(4).作業 : 機器人擺動作


(一)File

程式碼 :

#include <stdio.h>
FILE * fout=NULL;                              ///宣告一個檔案指標

int main(){    fout = fopen("filename.txt","w+"); ///開檔案    for(int i=0;i<20;i++)    {        fprintf(fout,"Hello World\n");    ///印到檔案中    }}


執行結果 : 


(二)motion

程式碼 :

#include <stdio.h>
FILE * fout2=NULL;  ///寫另一個檔案
FILE * fin2=NULL;    ///讀另一個檔案
float angle[20];           ///我們有20個關節的角度
int main()
{
    fout2 = fopen("motion.txt","w+");   ///另一個有關節的檔案
    for(int i=0;i<20;i++)
    {
        fprintf(fout2, "%.2f  ",angle[i]);   ///另一個有關節的檔案
                                 ///加空格 , 是因為怕數字黏起來  沒有加空格的話 , 就會黏起來      
    }                         
}


執行結果 : 


(三).第一個GLUT程式 : 


1.先到google搜尋freeglue windows,找Transmission Zero的網頁,Download以下畫面文件

2.解壓縮的畫面

複製libfreeglut.a改成libglut32.a


3.打開Code::Blocks
4.右上File找New在按Project出現以下畫面,找GLUT後按GO


(一)程式碼 : 

#include <GL/glut.h>
float angle[20];                                           ///NOW2
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f(1, 1, 1);                              ///white
        glutSolidTeapot( 0.3 );                      ///body
        glPushMatrix();
            glTranslatef(0.2, 0, 0);                 ///NOW2 (3)掛上去
            glRotatef(angle[1], 0,0,1);           ///NOW2 ///(2)旋轉
            glTranslatef(0.15, 0, 0);              ///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);///red
            glutSolidTeapot( 0.2 );                 ///right arm
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int oldX=0;///NOW2
void mouse(int button, int state, int x, int y)         ///NOW2
{///NOW2
    oldX = x                                                        ///NOW2
}
void motion(int x, int y)                                       ///NOW2
{///NOW2
    angle[1] += x-oldX;                                       ///NOW2
    oldX = x;                                                       ///NOW2
    display();                                                      ///NOW2
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);                      ///可以開大一點的window
    glutCreateWindow("06160150-W13");
    glutMouseFunc(mouse);                                 ///NOW2
    glutMotionFunc(motion);                                ///NOW2
    glutDisplayFunc(display);

    glutMainLoop();
}



(二)程式碼 : 

#include <GL/glut.h>
float angle[20];                   ///NOW2
int angleID=1;                     ///NOW3
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f(1, 1, 1);                     ///white
        glutSolidTeapot( 0.3 );                  ///body

        glPushMatrix();///右邊
            glTranslatef(0.2, 0, 0);                  ///NOW2 (3)掛上去
            glRotatef(angle[1], 0,0,1);               ///NOW2 ///(2)旋轉
            glTranslatef(0.15, 0, 0);                ///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);                      ///red
            glutSolidTeapot( 0.2 );                 ///right arm
            glPushMatrix();
                glTranslatef(0.2, 0, 0);            ///NOW2 (3)掛上去
                glRotatef(angle[2], 0,0,1);          ///NOW2 ///(2)旋轉
                glTranslatef(0.15, 0, 0);               ///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);                 ///red
                glutSolidTeapot( 0.2 );              ///right lower arm
            glPopMatrix();
        glPopMatrix();

        glPushMatrix();                            ///左邊
            glTranslatef(-0.2, 0, 0);               ///NOW2 (3)掛上去
            glRotatef(angle[3], 0,0,1);             ///NOW2 ///(2)旋轉
            glTranslatef(-0.15, 0, 0);             ///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);                    ///red
            glutSolidTeapot( 0.2 );                ///right arm
            glPushMatrix();
                glTranslatef(-0.2, 0, 0);         ///NOW2 (3)掛上去
                glRotatef(angle[4], 0,0,1);       ///NOW2 ///(2)旋轉
                glTranslatef(-0.15, 0, 0);        ///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);               ///red
                glutSolidTeapot( 0.2 );           ///right lower arm
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int oldX=0;                                      ///NOW2
void mouse(int button, int state, int x, int y)  ///NOW2
{
    oldX = x;                                    ///NOW2
}
#include <stdio.h>                               ///NOW3
void motion(int x, int y)                         ///NOW2
{
    angle[angleID] += x-oldX;                     ///NOW3
    oldX = x;                                    ///NOW2
    for(int i=0;i<20;i++)                       ///NOW3
    {
        printf(" %.2f ", angle[i]);            ///NOW3
    }
    printf("\n");                              ///NOW3
    display();                                ///NOW2
}
void keyboard(unsigned char key, int x, int y)   ///NOW3
{
    if(key=='1') angleID=1;                       ///NOW3
    if(key=='2') angleID=2;                       ///NOW3
    if(key=='3') angleID=3;                       ///NOW3
    if(key=='4') angleID=4;                       ///NOW3
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);///可以開大一點的window
    glutCreateWindow("06160150-W13");
    glutKeyboardFunc(keyboard);                  ///NOW3
    glutMouseFunc(mouse);                        ///NOW2
    glutMotionFunc(motion);                      ///NOW2
    glutDisplayFunc(display);

    glutMainLoop();
}


(三)程式碼 : 

#include <GL/glut.h>
#include <stdio.h>///NOW_FILE (0)
float angle[20];///NOW2
int angleID=1;///NOW3
FILE * fout = NULL;///NOW_FILE (1)
FILE * fin = NULL;///NOW_FILE_READ (1)
void display()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glColor3f(1, 1, 1);                     ///white
        glutSolidTeapot( 0.3 );                  ///body

        glPushMatrix();///右邊
            glTranslatef(0.2, 0, 0);                  ///NOW2 (3)掛上去
            glRotatef(angle[1], 0,0,1);               ///NOW2 ///(2)旋轉
            glTranslatef(0.15, 0, 0);                ///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);                      ///red
            glutSolidTeapot( 0.2 );                 ///right arm
            glPushMatrix();
                glTranslatef(0.2, 0, 0);            ///NOW2 (3)掛上去
                glRotatef(angle[2], 0,0,1);          ///NOW2 ///(2)旋轉
                glTranslatef(0.15, 0, 0);               ///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);                 ///red
                glutSolidTeapot( 0.2 );              ///right lower arm
            glPopMatrix();
        glPopMatrix();

        glPushMatrix();                            ///左邊
            glTranslatef(-0.2, 0, 0);               ///NOW2 (3)掛上去
            glRotatef(angle[3], 0,0,1);             ///NOW2 ///(2)旋轉
            glTranslatef(-0.15, 0, 0);             ///NOW2 (1)旋轉中心
            glColor3f(1, 0, 0);                    ///red
            glutSolidTeapot( 0.2 );                ///right arm
            glPushMatrix();
                glTranslatef(-0.2, 0, 0);         ///NOW2 (3)掛上去
                glRotatef(angle[4], 0,0,1);       ///NOW2 ///(2)旋轉
                glTranslatef(-0.15, 0, 0);        ///NOW2 (1)旋轉中心
                glColor3f(1, 0, 0);               ///red
                glutSolidTeapot( 0.2 );           ///right lower arm
            glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int oldX=0;                                      ///NOW2
void mouse(int button, int state, int x, int y)  ///NOW2
{
    oldX = x;                                    ///NOW2
}

void motion(int x, int y)                       ///NOW2
{
    angle[angleID] += x-oldX;                 ///NOW3
    oldX = x;                                                   ///NOW2
    if(fout == NULL) fout = fopen("motion.txt", "w+");                    ///NOW_FILE (2)
    for(int i=0;i<20;i++)
    {                                                            ///NOW3
        printf(" %.2f ", angle[i]);                  ///NOW3
        fprintf(fout, " %.2f ", angle[i]);          ///NOW_FILE
    }
    printf("\n");                                        ///NOW3
    fprintf(fout, "\n");                             ///NOW_FILE
    display();                                           ///NOW2
}
void keyboard(unsigned char key, int x, int y)   ///NOW3
{
    if(key=='1') angleID=1;                       ///NOW3
    if(key=='2') angleID=2;                       ///NOW3
    if(key=='3') angleID=3;                       ///NOW3
    if(key=='4') angleID=4;                       ///NOW3
    if(key=='w'){///NOW_FILE
        fout = fopen("motion.txt", "w+");       ///NOW_FILE (2)
   }
    if(key=='r'){
        if(fin==NULL) fin = fopen("motion.txt", "r");           ///NOW_FILE_READ (2)
        ///scanf("%d", &n);
        for(int i=0;i<20; i++)
       {                                                                                   ///NOW_FILE_READ
            fscanf(fin, "%f", &angle[i]);                                 ///NOW_FILE_READ
            printf(" %.2f ", angle[i]);                                     ///順便印出來看數字對不對
        }
    }
    glutPostRedisplay();                                                   ///NOW_FILE_READ 和 display()很像
}
int main(int argc, char**argv)
{
 glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);///可以開大一點的window
    glutCreateWindow("06160150-W13");
    glutKeyboardFunc(keyboard);                  ///NOW3
    glutMouseFunc(mouse);                        ///NOW2
    glutMotionFunc(motion);                      ///NOW2
    glutDisplayFunc(display);


    glutMainLoop();
}

沒有留言:

張貼留言