電腦圖學 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
(一)程式碼 :
#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
{ ///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
{ ///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();
}
沒有留言:
張貼留言