2021年5月26日 星期三

欸幹你看,是圖學欸Week14


 








#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidSphere( 0.3, 30, 30 );///範例偷這一行來      ///                 半徑  經度  緯度

    glutSwapBuffers();

}

int main(int argc, char**argv)

{

    glutInit( &argc, argv );

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow(" Week14 timer ");


    glutDisplayFunc(display);

    glutMainLoop();

}

















#include <GL/glut.h>
///display()函式, 其實 display 是函式指標
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    //glutSolidSphere( 0.3, 30, 30 );  ///範例偷這一行來
    ///            半徑,縱切,橫切
    glutWireSphere( 0.3, 30, 30); ///網格
    glutSwapBuffers();
}
void timer(int t)
///timer響起時, 做你要做的事
{
    glClearColor( 1, 0, 0, 0 );///清背景色:紅色
    display();///重製畫面
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow(" Week14 timer ");


    glutDisplayFunc(display);
    glutTimerFunc( 3000 , timer , 0 );
    ///           等多久, 函式 , int t
    glutMainLoop();
}
進階點 , 重複持續設定Timer(鬧鐘) , 實現Angle持續旋轉角度
 void timer(int t)
            ///timer響起時, 做你要做的事
            {
                glutTimerFunc( 300, timer, t+1 ); 
                glClearColor( 1, 0, 0, 0 );
                angle++;
                display();
            }

           上廁所、喝水
             void timer(int t)
            ///timer響起時, 做你要做的事
            {
                glutTimerFunc( 300, timer, t+1 ); 
                glClearColor( 1, 0, 0, 0 );
                angle++;
                display();
            }
            
            倒頭回去睡覺
            void timer(int t)
            ///timer響起時, 做你要做的事
            {
                glutTimerFunc( 300, timer, t+1 ); 
                glClearColor( 1, 0, 0, 0 );
                angle++;
                display();
            }



#include <GL/glut.h>
///display()函式, 其實 display 是函式指標
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef( angle, 0, 0, 1 );
        glutSolidCube( 0.3 );
    glPopMatrix();
    ///glutWireSphere( 0.3, 30, 30); ///網格
    glutSwapBuffers();
}
void timer(int t)
///timer響起時, 做你要做的事
{
    glutTimerFunc( 300, timer, t+1 ); 
    glClearColor( 1, 0, 0, 0 );///背景紅色
    angle++;
    display();///重製畫面
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow(" Week14 timer ");


    glutDisplayFunc(display);
    glutTimerFunc( 3000 , timer , 0 );
    ///           等多久, 函式 , int t
        glutMainLoop();
}

讓方塊旋轉
int diff=2;
void timer(int t)
///timer響起時, 做你要做的事 (鬧鐘)
{
    glutTimerFunc( 20, timer, t+1 ); ///起床第一件事, 先設定新鬧鐘
    glClearColor( 1, 0, 0, 0 );///清背景色:紅色
        if( angle>90 ) diff=diff-2;       if( angle<0  ) diff=diff+2;
       angle = angle+diff ;
    display();///重製畫面
}



加上手手選轉

#include <GL/glut.h>
///display()函式, 其實 display 是函式指標
float angle=0;
void drawArm1()
{
    glPushMatrix();
        glScalef(1, 0.5, 0.5);///變細長的手臂
        glColor3f(0, 1, 0);///綠色的
        glutSolidCube( 0.2 );///手臂
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1, 1, 1); glutSolidCube( 0.4 );///白色的身體
    glPushMatrix();
        glTranslatef( -0.2, 0.2, 0);///(3)掛上肩膀
        glRotatef( angle, 0, 0, 1 );///(2)轉動
        glTranslatef( -0.1, 0, 0);///(1)把旋轉中心(關節) 移到畫面最中心
        drawArm1();///綠色的手臂
    glPopMatrix();
    glutSwapBuffers();
}
int diff=2;
void timer(int t)
///timer響起時, 做你要做的事 (鬧鐘)
{
    glutTimerFunc( 20, timer, t+1 ); ///起床第一件事, 先設定新鬧鐘
    ///glClearColor( 1, 0, 0, 0 );///清背景色:紅色
    if( angle>90 ) diff=diff-2;
    if( angle<0  ) diff=diff+2;
    angle = angle+diff ;
    display();///重製畫面
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow(" Week14 timer ");


    glutDisplayFunc(display);
    glutTimerFunc( 3000 , timer , 0 );
    ///           等多久, 函式 , int t
        glutMainLoop();
}

沒有留言:

張貼留言

距地表面160 Week11

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