2021年6月2日 星期三

yun_電腦圖學筆記week15

 今天上課第一個課堂作業老師教了新的fprintf

#include <stdio.h> int main(int argc,char**argv) { FILE*fout=NULL; fout=fopen("檔名.txt","w+"); printf("Hello World\n"); fprintf(fout,"Hello World\n"); }

從freeglut/bin裡面可以找到一個檔名.txt,打開就是跟專案打開一樣的輸出成果
接著第二個課堂作業,將檔案從freeglut/bin改到今天開的專案資料夾內
將working_dir後面改成''.",接著到codeblocks按是確認檔案更改









接著開啟後一樣會出現跟上面一樣的執行結果不過文件檔會變成出現在week15_file內












#include <stdio.h> int main(int argc,char**argv) { ///FILE*fout=NULL; ///fout=fopen("ÀɦW.txt","w+"); ///printf("Hello World\n"); ///fprintf(fout,"Hello World\n"); FILE*fin=NULL; fin=fopen("檔名.txt","r"); ///scanf("%d",&n); ///scanf("%f",&f); ///scanf("%c",&c); ///scanf("%s",line); char line[100]; fscanf(fin,"%s",line); printf("你讀到了字串: %s\n",line); fscanf(fin,"%s",line); printf("你讀到了字串: %s\n",line); }









接著老師教了新的程式碼,不過我的中文有出現亂碼,可能是windows字不相同導致

#include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidTeapot(0.3); glutSolidTeapot(0.3); glutSolidTeapot(0.3); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow(" Week15 file "); glutDisplayFunc(display); glutMainLoop(); }
























接著我們讓他固定在一個點轉動,就像手臂這樣轉動

#include <stdio.h> #include <GL/glut.h> float angle=0,diff=2; void timer(int t) { glutTimerFunc(30,timer,t+1); angle+=diff; if(angle>90)diff=-2; if(angle<0)diff=+2; glutPostRedisplay(); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); ///glutSolidTeapot(0.3); glPushMatrix(); glTranslatef(-0.3,0,0); glRotatef(angle,0,0,1); glTranslatef(-0.3,0,0); glutSolidTeapot(0.3); glPushMatrix(); ///glutSolidTeapot(0.3); glPopMatrix(); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow(" Week15 file "); glutTimerFunc(0,timer,0); glutDisplayFunc(display); glutMainLoop(); }













接著老師把另外兩個茶壺也新增上來了























這樣三個就會掛著一起甩動了!!

#include <stdio.h> #include <GL/glut.h> float angle=0,diff=2; void timer(int t) { glutTimerFunc(30,timer,t+1); angle+=diff; if(angle>90)diff=-2; if(angle<0)diff=+2; glutPostRedisplay(); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glutSolidTeapot(0.3); glPushMatrix(); glTranslatef(-0.3,0,0); glRotatef(angle,0,0,1); glTranslatef(-0.3,0,0); glutSolidTeapot(0.3); glPushMatrix(); glTranslatef(-0.3,0,0); glRotatef(angle,0,0,1); glTranslatef(-0.3,0,0); glutSolidTeapot(0.3); glPopMatrix(); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow(" Week15 file "); glutTimerFunc(0,timer,0); glutDisplayFunc(display); glutMainLoop(); }






















接著我們讓第二個茶壺按1的時候固定他,按0的時候讓他以第一個茶壺為中心點旋轉,這是按1的時候














這是按0的時候













#include <stdio.h> #include <GL/glut.h> float angle[20]={},diff=2; int angleID=0; void timer(int t) { glutTimerFunc(30,timer,t+1); angle[angleID]+=diff; if(angle[angleID]>90)diff=-2; if(angle[angleID]<0)diff=+2; glutPostRedisplay(); } void keyboard(unsigned char key,int x,int y) { if(key=='1')angleID=1; if(key=='0')angleID=0; } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glutSolidTeapot(0.3); glPushMatrix(); glTranslatef(-0.3,0,0); glRotatef(angle[0],0,0,1); glTranslatef(-0.3,0,0); glutSolidTeapot(0.3); glPushMatrix(); glTranslatef(-0.3,0,0); glRotatef(angle[1],0,0,1); glTranslatef(-0.3,0,0); glutSolidTeapot(0.3); glPopMatrix(); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow(" Week15 file "); glutKeyboardFunc(keyboard); glutTimerFunc(0,timer,0); glutDisplayFunc(display); glutMainLoop(); }






















接著老師多新增了幾個茶壺並用0123控制他轉動


#include <stdio.h>///可割可棄 #include <GL/glut.h> float angle[20]={}, diff=2;///Step05 本來只有1個角度,現在有很多個,初始為0 int angleID=0; ///Step05 現在要改第幾個角度!!! void timer( int t ){ glutTimerFunc( 30, timer, t+1 ); angle[angleID] += diff; ///Step05 if(angle[angleID]>90) diff=-2; ///Step05 if(angle[angleID]<0) diff=+2; ///Step05 glutPostRedisplay();///現在這個比較好, 以前會用 display()重畫 } void keyboard( unsigned char key, int x, int y){ ///Step05 if(key=='0') angleID=0; ///Step05 if(key=='1') angleID=1; ///Step05 if(key=='2') angleID=2; ///Step05 if(key=='3') angleID=3; ///Step05 } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glutSolidTeapot( 0.3 );///身體 glPushMatrix();///左半邊 glTranslatef(-0.3,0,0);///(3)掛在正確的地方 glRotatef(angle[0], 0,0,1);///(2)旋轉 ///Step05 glTranslatef(-0.3,0,0);///(1)把關節旋轉中心放到畫面中心 glutSolidTeapot( 0.3 );///左手臂(沒有重疊) glPushMatrix(); glTranslatef(-0.3,0,0);///(3)掛在正確的地方 glRotatef(angle[1], 0,0,1);///(2)旋轉 ///Step05 glTranslatef(-0.3,0,0);///(1)把關節旋轉中心放到畫面中心 glutSolidTeapot( 0.3 );///左手肘(重疊了) glPopMatrix(); glPopMatrix(); glPushMatrix();///右半邊 glTranslatef(+0.3, 0,0 ); glRotatef(-angle[2], 0,0,1); glTranslatef(+0.3, 0,0); glutSolidTeapot( 0.3 );///右手臂 glPushMatrix(); glTranslatef(+0.3, 0,0 ); glRotatef(-angle[3], 0,0,1); glTranslatef(+0.3, 0,0); glutSolidTeapot( 0.3 );///右手肘 glPopMatrix(); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } int main( int argc, char ** argv ) { glutInit( &argc, argv ); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("week15 file"); glutKeyboardFunc(keyboard);///Step05 整合很多關節,會去改angleID glutTimerFunc(0, timer, 0);///Step04-2 設第1個timer做動畫 glutDisplayFunc(display); glutMainLoop(); }


























沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...