| Week 13 |
§ 檔案 §
----------------------------------------------------------------------------------------------------------------
●01
打開codeblocks
new project > console application
●02
輸入程式碼
印出20個Hello World
PS*小黑窗不會顯示 在檔案資料夾裡面的文字檔.txt
◎程式碼
#include <stdio.h> ///(0)
FILE * fout=NULL; ///(1)宣告 檔案指標 變數
int main()
{
fout = fopen("filename.txt","w+");///(2) 開檔案
for(int i=0;i<20;i++)
{
fprintf(fout,"Hello World");
}
}
輸入程式碼
印出20個浮點數
PS*小黑窗不會顯示 在檔案資料夾裡面的文字檔.txt
◎程式碼
#include <stdio.h> ///(0)
FILE * fout=NULL;
///(1)宣告 檔案指標 變數
///(1)宣告 檔案指標 變數
float angle[20];
int main()
{
fout = fopen("filename.txt","w+");
///(2) 開檔案
///(2) 開檔案
for(int i=0;i<20;i++)
{
fprintf(fout,"%.1f ",angle[i]);
}
}
。打開 codeblocks Files> New>project>GLUT
。到google搜尋 freegult windows
下載 Download freeglut 3.0.0 for MinGW
。解壓縮 freeglut。打開 lib 找到 freeglut.a 並複製
。把 freeglut.a 改為 libglut32.a
。複製 freeglut連接位置
。找到 程式碼 main.c 並打開 執行完成!
。找到 程式碼 main.c 並打開 執行完成!
●05
開起茶壺
◎程式碼
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(600,600);///調整視窗大小
glutCreateWindow("week 13 motion TRT angle file");
glutDisplayFunc(display);
glutMainLoop();
}
●06
加入右手臂
◎程式碼
#include <GL/glut.h>
float angle[20];///NOW
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///body
glColor3f(1,1,1);///white
glutSolidTeapot( 0.3 );///body
glTranslatef(0.18, 0, 0);///(3)掛到肩上
glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///right upper arm
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int oldX;///NOW
void mouse(int button, int state, int x, int y)///NOW
{
oldX = x;///NOW
}
void motion(int x, int y)///NOW
{
angle[1] += (x-oldX);///NOW
oldX = x;///NOW
display();///NOW
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
///glutInitWindowSize(600,600);///我們可以開很大的視窗
glutCreateWindow("week 13 motion TRT angle file");
glutMouseFunc(mouse);///NOW
glutMotionFunc(motion);///NOW
glutDisplayFunc(display);
glutMainLoop();
}
**手臂轉動是以 X(變舊的X1)→X(舊的X2)→New X
◎程式碼
glPushMatrix();///right Arm
glTranslatef(0.18, 0, 0);///(3)掛到肩上
glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///right upper arm
glPushMatrix();///NOW2 長出下手臂
glTranslatef(0.18, 0, 0);///(3)掛到肘上
glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///right lower arm
glPopMatrix();
glPopMatrix();
glPushMatrix();///left Arm
glTranslatef(-0.18, 0, 0);///(3)掛到肩上
glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///left upper arm
glPushMatrix();///NOW2 長出下手臂
glTranslatef(-0.18, 0, 0);///(3)掛到肘上
glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心
●07
轉動第幾個關節
◎程式碼
#include <stdio.h> ///(0) ///NOW4
#include <GL/glut.h>
FILE * fout=NULL;///(1) ///NOW4
float angle[20];///NOW
int angleID=1;///第幾個要轉動的關節 ///NOW3
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix();///body
glColor3f(1,1,1);///white
glutSolidTeapot( 0.3 );///body
glPushMatrix();///right Arm
glTranslatef(0.18, 0, 0);///(3)掛到肩上
glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///right upper arm
}
關節轉動並顯示位置坐標數據
◎程式碼
#include <stdio.h> ///(0) ///NOW4
#include <GL/glut.h>
FILE * fout=NULL;///(1) ///NOW4
FILE * fin =NULL;///(1) ///NOW5
float angle[20];///NOW
int angleID=1;///第幾個要轉動的關節 ///NOW3
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///body
glColor3f(1,1,1);///white
glutSolidTeapot( 0.3 );///body
glPushMatrix();///right Arm
glTranslatef(0.18, 0, 0);///(3)掛到肩上
glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///right upper arm
glPushMatrix();///NOW2 長出下手臂
glTranslatef(0.18, 0, 0);///(3)掛到肘上
glRotatef(angle[2], 0,0,1);///(2)轉動 ///NOW
glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///right lower arm
glPopMatrix();
glPopMatrix();
glPushMatrix();///left Arm
glTranslatef(-0.18, 0, 0);///(3)掛到肩上
glRotatef(angle[3], 0,0,1);///(2)轉動 ///NOW
glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///left upper arm
glPushMatrix();///NOW2 長出下手臂
glTranslatef(-0.18, 0, 0);///(3)掛到肘上
glRotatef(angle[4], 0,0,1);///(2)轉動 ///NOW
glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心
glColor3f(1,0,0);///red
glutSolidTeapot( 0.2 );///left lower arm
glPopMatrix();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int oldX;///NOW
void mouse(int button, int state, int x, int y)///NOW
{
oldX = x;///NOW
}
void motion(int x, int y)///NOW
{
angle[angleID] += (x-oldX);///NOW ///NOW3
oldX = x;///NOW
if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4
for(int i=0; i<20; i++){///NOW4
printf( "%.1f ", angle[i]);///NOW4
fprintf( fout, "%.1f ", angle[i]);///NOW4
}
printf("\n");///NOW4
fprintf(fout, "\n");///NOW4
display();///NOW
}
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' || key=='W'){///NOW4 小寫的 w
if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW4
for(int i=0; i<20; i++){///NOW4
printf( "%.1f ", angle[i]);///NOW4
fprintf( fout, "%.1f ", angle[i]);///NOW4
}
printf("\n");///NOW4
fprintf(fout, "\n");///NOW4
}
if(key=='r'){///NOW5
if(fin==NULL) fin = fopen("motion.txt", "r");///NOW5
for(int i=0; i<20;i++){///NOW5
fscanf(fin, "%f", &angle[i]);///NOW5
}///NOW5
}
glutPostRedisplay();///和 display()很像,但更好 ///NOW5
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
///glutInitWindowSize(600,600);///我們可以開很大的視窗
glutCreateWindow("week 13 motion TRT angle file");
glutKeyboardFunc(keyboard);///NOW3
glutMouseFunc(mouse);///NOW
glutMotionFunc(motion);///NOW
glutDisplayFunc(display);
glutMainLoop();
}


沒有留言:
張貼留言