2021年6月2日 星期三

欸幹你看,是圖學欸Week15

 


















產生一個文字檔在freeglut,bin裡面。

#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");

}









用notepad++開啟week15-file.cbp更改儲存位置。


#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");


    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);

}

*注意有可能因為萬國碼導致跑不出中文*











#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);///(3)掛在正確的地方

            glRotatef(angle,0,0,1);///(2)旋轉

            glTranslatef(-0.3,0,0);///(1)把關節放到正中心

            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");


    glutDisplayFunc(display);

    glutTimerFunc(0,timer,0);

    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);///(3)掛在正確的地方
            glRotatef(angle,0,0,1);///(2)旋轉
            glTranslatef(-0.3,0,0);///(1)把關節放到正中心
            glutSolidTeapot( 0.3 );///左手臂(重疊了)
                glPushMatrix();
                glTranslatef(-0.3,0,0);///(3)掛在正確的地方
                glRotatef(angle,0,0,1);///(2)旋轉
                glTranslatef(-0.3,0,0);///(1)把關節放到正中心
                glutSolidTeapot( 0.3 );///左手臂(重疊了)
                    glutSolidTeapot( 0.3 );///左手肘(重疊了)
                glPopMatrix();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
}
int main( int argc, char ** argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week15 file");

    glutDisplayFunc(display);
    glutTimerFunc(0,timer,0);
    glutMainLoop();
}

















現在可以用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);///(3)掛在正確的地方
            glRotatef(angle[0],0,0,1);///(2)旋轉
            glTranslatef(-0.3,0,0);///(1)把關節放到正中心
            glutSolidTeapot( 0.3 );///左手臂(重疊了)
                glPushMatrix();
                glTranslatef(-0.3,0,0);///(3)掛在正確的地方
                glRotatef(angle[0],0,0,1);///(2)旋轉
                glTranslatef(-0.3,0,0);///(1)把關節放到正中心
                glutSolidTeapot( 0.3 );///左手臂(重疊了)
                    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);
    glutDisplayFunc(display);
    glutTimerFunc(0,timer,0);
    glutMainLoop();
}

















*實作*
把關節變四個,可用鍵盤控制
#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 == '0') angleID=0;
    if (key == '1') angleID=1;
    if (key == '2') angleID=2;
    if (key == '3') angleID=3;
}
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)旋轉
            glTranslatef(-0.3,0,0);///(1)把關節放到正中心
            glutSolidTeapot( 0.3 );///左手臂(重疊了)
                glPushMatrix();
                    glTranslatef(-0.3,0,0);///(3)掛在正確的地方
                    glRotatef(angle[1],0,0,1);///(2)旋轉
                    glTranslatef(-0.3,0,0);///(1)把關節放到正中心
                    glutSolidTeapot( 0.3 );///左手臂(重疊了)
                    glutSolidTeapot( 0.3 );///左手肘(重疊了)
                glPopMatrix();
        glPopMatrix();
        glPushMatrix();///右半邊
            glTranslatef(+0.3,0,0);///(3)掛在正確的地方
            glRotatef(angle[2],0,0,1);///(2)旋轉
            glTranslatef(+0.3,0,0);///(1)把關節放到正中心
            glutSolidTeapot( 0.3 );///左手臂(重疊了)
                glPushMatrix();
                    glTranslatef(+0.3,0,0);///(3)掛在正確的地方
                    glRotatef(angle[3],0,0,1);///(2)旋轉
                    glTranslatef(+0.3,0,0);///(1)把關節放到正中心
                    glutSolidTeapot( 0.3 );///左手臂(重疊了)
                    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);
    glutDisplayFunc(display);
    glutTimerFunc(0,timer,0);
    glutMainLoop();
}

沒有留言:

張貼留言

距地表面160 Week11

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