2021年5月31日 星期一

吉親摳ㄎㄎ-Week15

 電腦圖學

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+

    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 做出右邊的手臂

程式碼:













 

沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...