2022年6月6日 星期一

09163076 week14


 1.練習開檔案..關檔案



2.練習開檔案.讀檔案.關檔案

3.拿week13最後的程式碼配合上面教的修改

#include <GL/glut.h>

#include <stdio.h>

float angle[20],oldx=0;

int angleID=0;

FILE * fout = NULL;

void myWrite(){

    if(fout==NULL)fout=fopen("file.txt","w+");

    for(int i=0;i<20;i++){

        printf("%.2f",angle[i]);

        fprintf(fout,"%.2f",angle[i]);

    }

}

void keyboard( unsigned char key,int x,int y){

    if( key == '0' ) angleID=0;

    if( key == '1' ) angleID=1;

    if( key == '2' ) angleID=2;

    if( key == '3' ) angleID=3;

}

void mouse(int button, int state, int x, int y){

    oldx = x;

}

void motion(int x,int y){

    angle[angleID]+=(x-oldx);

    oldx = x;

    glutPostRedisplay();

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,1);

    glRectf(0.3, 0.5, -0.3, -0.2);

     glPushMatrix();

        glTranslatef(0.3,0.5,0);

        glRotatef(angle[0] ,0,0,1);

        glTranslatef(-0.3 , -0.4 , 0);

        glColor3f(1,0,0);

        glRectf(0.3,0.5,0.8,0.3);

        glPushMatrix();

            glTranslatef(0.8, 0.4, 0);

            glRotatef(angle[1] ,0,0,1);

            glTranslatef(-0.8, -0.4, 0);

            glColor3f(0,1,0);

            glRectf(0.8,0.5,1.1,0.3);

        glPopMatrix();

    glPopMatrix();

      glPushMatrix();

        glTranslatef(-0.3,0.5,0);

        glRotatef(angle[2] ,0,0,1);

        glTranslatef(0.3 , -0.4 , 0);

        glColor3f(1,0,0);

        glRectf(-0.3,0.5,-0.8,0.3);

        glPushMatrix();

            glTranslatef(-0.8, 0.4, 0);

            glRotatef(angle[3] ,0,0,1);

            glTranslatef(0.8, -0.4, 0);

            glColor3f(0,1,0);

            glRectf(-0.8,0.5,-1.1,0.3);

        glPopMatrix();

    glPopMatrix();

    glutSwapBuffers();

}

int main(int argc, char **argv)

{

     glutInit(&argc, argv);

     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

     glutCreateWindow("week14 TRT angle write");

     glutMouseFunc(mouse);

     glutMotionFunc(motion);

     glutKeyboardFunc(keyboard);

     glutDisplayFunc(display);

     glutMainLoop();

     return 0;

}

4.

#include <GL/glut.h>

#include <stdio.h>

float angle[20],oldx=0;

int angleID=0;

FILE * fout = NULL,*fin=NULL;

void myWrite(){

    if(fout==NULL)fout=fopen("file.txt","w+");

    for(int i=0;i<20;i++){

         printf(     "%.2f",angle[i]);

        fprintf(fout,"%.2f",angle[i]);

    }

    printf("\n");

    fprintf(fout,"\n");

}

void myRead(){

    if(fout!=NULL){fclose(fout);fout=NULL;}

    if(fin==NULL)fin=fopen("file.txt","r");

    for(int i=0;i<20;i++){

        fscanf(fin,"%f",&angle[i]);

    }

    glutPostRedisplay();

}

void keyboard( unsigned char key,int x,int y){

    if( key == '0' ) angleID=0;

    if( key == '1' ) angleID=1;

    if( key == '2' ) angleID=2;

    if( key == '3' ) angleID=3;

    if( key == 'r' ){

        myRead();

    }

}

void mouse(int button, int state, int x, int y){

    oldx = x;

}

void motion(int x,int y){

    angle[angleID]+=(x-oldx);

    myWrite();

    oldx = x;

    glutPostRedisplay();

}

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,1);

    glRectf(0.3, 0.5, -0.3, -0.2);

     glPushMatrix();

        glTranslatef(0.3,0.5,0);

        glRotatef(angle[0] ,0,0,1);

        glTranslatef(-0.3 , -0.4 , 0);

        glColor3f(1,0,0);

        glRectf(0.3,0.5,0.8,0.3);

        glPushMatrix();

            glTranslatef(0.8, 0.4, 0);

            glRotatef(angle[1] ,0,0,1);

            glTranslatef(-0.8, -0.4, 0);

            glColor3f(0,1,0);

            glRectf(0.8,0.5,1.1,0.3);

        glPopMatrix();

    glPopMatrix();

      glPushMatrix();

        glTranslatef(-0.3,0.5,0);

        glRotatef(angle[2] ,0,0,1);

        glTranslatef(0.3 , -0.4 , 0);

        glColor3f(1,0,0);

        glRectf(-0.3,0.5,-0.8,0.3);

        glPushMatrix();

            glTranslatef(-0.8, 0.4, 0);

            glRotatef(angle[3] ,0,0,1);

            glTranslatef(0.8, -0.4, 0);

            glColor3f(0,1,0);

            glRectf(-0.8,0.5,-1.1,0.3);

        glPopMatrix();

    glPopMatrix();

    glutSwapBuffers();

}

int main(int argc, char **argv)

{

     glutInit(&argc, argv);

     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

     glutCreateWindow("week14 TRT angle write");

     glutMouseFunc(mouse);

     glutMotionFunc(motion);

     glutKeyboardFunc(keyboard);

     glutDisplayFunc(display);

     glutMainLoop();

     return 0;

}

5.現在工作目錄在(in C:\Users\asus\Desktop\freeglut\bin),
   把它放在程式碼的目錄
   a.在.cbp的檔案裡找到working_dir="in C:\Users\asus\Desktop\freeglut\bin",改成working_dir=".",存檔
   b.將freeglut裡的freeglut.dll複製到week14_TRT_angle_write的資料夾裡
   c.打開codeblocks後執行

6.鬧鐘(計時器)

#include <GL/glut.h>

#include <stdio.h>

void timer(int t){

    printf("鬧鐘%d,我起床了\n",t);

    printf("設定下一個鬧鐘\n");

    glutTimerFunc(1000,timer,t+1);

    printf("設好鬧鐘,再回去睡\n");

}

void display()

{


}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week14 timer");


    glutTimerFunc(3000,timer,0);

    glutDisplayFunc(display);

    glutMainLoop();

}


7.鬧鐘加聲音

a.將音檔加入freeglut>bin

b.修改程式碼後執行

#include <GL/glut.h>

#include <mmsystem.h>

#include <stdio.h>

void timer(int t){

    printf("鬧鐘%d,我起床了\n",t);

    PlaySound("do.wav",NULL,SND_ASYNC);

    printf("設定下一個鬧鐘\n");

    glutTimerFunc(2000,timer,t+1);

}

void display()

{


}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);

    glutCreateWindow("week14 timer");


    glutTimerFunc(3000,timer,0);

    glutDisplayFunc(display);

    glutMainLoop();

}




沒有留言:

張貼留言