電腦圖學
Week15
1.利用fopen() fprintf()寫檔案,執行目錄在freeglut/bin裡
程式碼:
#include <stdio.h>
int main(int argc,char**argv)
{
FILE * fout=NULL; ///檔案指標 file output 變數
fout=fopen("檔名txt","w+"); ///開啟檔案,檔名.txt,模式:write+
int main(int argc,char**argv)
{
FILE * fout=NULL; ///檔案指標 file output 變數
fout=fopen("檔名txt","w+"); ///開啟檔案,檔名.txt,模式:write+
printf("Hello World\n");
fprintf(fout,"Hello World");
}
2.改變專案目錄位置,跟之前一樣,把當前的cbp檔開notep++,裡面的working_dir路徑改為 "."
3.把剛才的檔案先註解掉,再把記事本的檔案開起來
程式碼:
#include <stdio.h>
int main(int argc,char**argv)
{
/*FILE * fout=NULL; ///檔案指標 file output 變數
fout=fopen("檔名.txt","w+"); ///開啟檔案,檔名.txt,模式write+
printf("Hello World\n");
fprintf(fout,"Hello World");*/
FILE * fin =NULL; ///讀檔
fin=fopen("檔名.txt","r");
char line[100];
fscanf(fin,"%s",line); ///讀入一字串
printf("現在讀到的是%s \n",line); ///印出來
fscanf(fin,"%s",line);
printf("現在讀到的是%s \n",line);
}
4.重新開始做一個茶壺,這是以前學過的喔,但因為我們剛才把檔案路徑改過了,所以要把freeglut裡的freeglut.dll,z複製到當前的專案裡,才有需要的程式碼
程式碼:
#include <stdio.h>
#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);
glutCreateWindow("Week15 many angles");
glutDisplayFunc(display);
glutMainLoop();
}
5.1複習上週教的timer程式
程式碼:
#include <stdio.h>
#include <GL/glut.h>
float angle=0;
float diff=2;
///float angle=[20];
void timer (int t)
{
glutTimerFunc(30,timer,t+1); ///設定新的timer(等多久,timer ,參數)
angle+=diff;
if(angle>90) diff=-2;
if(angle<0) diff=+2;
glutPostRedisplay();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3); ///頭
glutSolidTeapot(0.3); ///左手
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 many angles");
glutDisplayFunc(display);
glutTimerFunc(0,timer,0);
glutMainLoop();
}
5.2讓手臂會動會動起來
程式碼:
#include <stdio.h>
#include <GL/glut.h>
float angle=0;
float diff=2;
///float angle=[20];
void timer (int t)
{
glutTimerFunc(30,timer,t+1); ///設定新的timer(等多久,timer ,參數)
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 ); ///左手臂, 但是,要用 T-R-T移位置
glPushMatrix();
glTranslatef(-0.3, 0,0);
glRotatef(angle, 0,0,1);
glTranslatef(-0.3, 0,0);
glutSolidTeapot( 0.3 ); ///左手肘
glPopMatrix();
glPopMatrix();
glPushMatrix();
glutSolidTeapot( 0.3 ); ///右手臂
glutSolidTeapot( 0.3 ); ///右手肘
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("Week15 many angles");
glutDisplayFunc(display);
glutTimerFunc(0,timer,0);
glutMainLoop();
}
5.3 做出右邊的手臂
程式碼:




沒有留言:
張貼留言