|Step 01|
1.照慣例下載《freeglut》並確認可執行
1.1修改《main.cpp》內的程式碼為下
```
#include <stdio.h>
int main()
{
FILE *fout=fopen("file.txt","w+");
printf("HELLO WORLD\n");
fprintf(fout,"HELLO WORLD\n");
fclose(fout);
}
```
|Step 01-2|
1.創一新專案
```
#include <stdio.h>
int main()
{
FILE*fout=fopen("file.txt", "w+");
fprintf(fout, "3.1415926\n");
fclose(fout); //關閉檔案
float angle=0;
FILE*fin=fopen("file.txt", "r");
fscanf(fin, "%f", &angle);
printf("讀到了角度:%f", angle);
fclose(fin);
}
```
|Step 01-3|
1.把上週(Week_13)的程式(WEEK_13_RECT_MANY)拿來改
```
#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("%.1f", angle[i]); //小黑窗印出來
fprintf(fout, "%.1f", 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);
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.5);
glPushMatrix();
glTranslatef(0.3, 0.4, 0);
glRotatef(angle[0], 0, 0, 1);
glTranslatef(-0.3, -0.4, 0);
glColor3f(1, 0, 0);
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);
glRotatef(angle[1], 0, 0, 1);
glTranslatef(-0.7, -0.4, 0);
glColor3f(0, 1, 0);
glRectf(0.7, 0.5, 1.0, 0.3);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.3, 0.4, 0);
glRotatef(angle[2], 0, 0, 1);
glTranslatef(0.3, -0.4, 0);
glColor3f(1, 0, 0);
glRectf(-0.3, 0.5, -0.7, 0.3);
glPushMatrix();
glTranslatef(-0.7, 0.4, 0);
glRotatef(angle[3], 0, 0, 1);
glTranslatef(0.7, -0.4, 0);
glColor3f(0, 1, 0);
glRectf(-0.7, 0.5, -1.0, 0.3);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week_13 rect TRT");
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
```
2.讓訊息更有序
```
#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("%.1f", angle[i]);
fprintf(fout, "%.1f", angle[i]);
}
puts("");
fprintf(fout, "\n");
}
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);
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.5);
glPushMatrix();
glTranslatef(0.3, 0.4, 0);
glRotatef(angle[0], 0, 0, 1);
glTranslatef(-0.3, -0.4, 0);
glColor3f(1, 0, 0);
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);
glRotatef(angle[1], 0, 0, 1);
glTranslatef(-0.7, -0.4, 0);
glColor3f(0, 1, 0);
glRectf(0.7, 0.5, 1.0, 0.3);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.3, 0.4, 0);
glRotatef(angle[2], 0, 0, 1);
glTranslatef(0.3, -0.4, 0);
glColor3f(1, 0, 0);
glRectf(-0.3, 0.5, -0.7, 0.3);
glPushMatrix();
glTranslatef(-0.7, 0.4, 0);
glRotatef(angle[3], 0, 0, 1);
glTranslatef(0.7, -0.4, 0);
glColor3f(0, 1, 0);
glRectf(-0.7, 0.5, -1.0, 0.3);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week_13 rect TRT");
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
```
2.讓他記錄並重播動畫
```
#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("%.1f ", angle[i]);
fprintf(fout, "%.1f ", angle[i]);
}
puts("");
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=='r') myRead();
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);
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.5);
glPushMatrix();
glTranslatef(0.3, 0.4, 0);
glRotatef(angle[0], 0, 0, 1);
glTranslatef(-0.3, -0.4, 0);
glColor3f(1, 0, 0);
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);
glRotatef(angle[1], 0, 0, 1);
glTranslatef(-0.7, -0.4, 0);
glColor3f(0, 1, 0);
glRectf(0.7, 0.5, 1.0, 0.3);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.3, 0.4, 0);
glRotatef(angle[2], 0, 0, 1);
glTranslatef(0.3, -0.4, 0);
glColor3f(1, 0, 0);
glRectf(-0.3, 0.5, -0.7, 0.3);
glPushMatrix();
glTranslatef(-0.7, 0.4, 0);
glRotatef(angle[3], 0, 0, 1);
glTranslatef(0.7, -0.4, 0);
glColor3f(0, 1, 0);
glRectf(-0.7, 0.5, -1.0, 0.3);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week_13 rect TRT");
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
```
沒有留言:
張貼留言