2022年3月14日 星期一

week04 note

下載範例 jsyeh.org/sdcg



四個紅色茶壺


#include <GL/glut.h>
   void myteapot(float x, float y)
   {
       glPushMatrix();
        glTranslatef(x,y,0);
        glutSolidTeapot(0.3);
        glPopMatrix();
   }

    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        glColor3f(1,0,0);
        myTeapot( +0.5, +0.5 );
        myTeapot( +0.5, -0.5 );
        myTeapot( -0.5, -0.5 );
        myTeapot( -0.5, +0.5 );

        glutSwapBuffers();///交換2倍的buffer
    }

    int main(int argc, char**argv)
    {///進階的main函式
        glutInit( &argc, argv );///初始化
        glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///2倍+3D
        glutCreateWindow("week03的視窗");///視窗

        glutDisplayFunc( display );///用來畫畫的函式
    glutMainLoop();





滑鼠移動


#include <GL/glut.h>
 #include <stdio.h>

    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

        glutSwapBuffers();///交換2倍的buffer
    }
    void mouse(int button,int state, int x,int y)
    {
        printf("%d %d %d %d\n",button,state,x,y);
    }

    int main(int argc, char**argv)
    {///進階的main函式
        glutInit( &argc, argv );///初始化
        glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///2倍+3D
        glutCreateWindow("week04 mouse");///視窗

        glutDisplayFunc( display );///用來畫畫的函式
        glutMouseFunc( mouse );
    glutMainLoop();

    }






用滑鼠移動茶壺四個象限

#include <GL/glut.h>
 #include <stdio.h>
int mouseX=0, mouseY=0;
    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

        glColor3f(1,1,0);
        glPushMatrix();
            glTranslatef((mouseX-150)/150.0,-(mouseY-150)/150.0, 0);
            glutSolidTeapot(0.3);
        glPopMatrix();
        glutSwapBuffers();

    }
    void mouse(int button,int state, int x,int y)
    {
        mouseX=x; mouseY=y;
    }

    int main(int argc, char**argv)
    {///進階的main函式
        glutInit( &argc, argv );///初始化
        glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///2倍+3D
        glutCreateWindow("week04 mouse");///視窗

        glutDisplayFunc( display );///用來畫畫的函式
        glutMouseFunc( mouse );
    glutMainLoop();

    }


用滑鼠畫出圖


include <GL/glut.h>
 #include <stdio.h>
int mouseX=0, mouseY=0,N=0;
int mx[100],my[100];
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glColor3f(1,1,0);
    glBegin(GL_LINE_LOOP);
    for(int i=0; i<N; i++){
        glVertex2f((mx[i]-150)/150.0,-(my[i]-150)/150.0);
    }
    glEnd();
    glutSwapBuffers();

}
void mouse(int button,int state, int x,int y)
{
    mouseX=x; mouseY=y;
    if(state==GLUT_DOWN){
        printf(" glVertex2f((mx[i]-150)/150.0,-(my[i]-150)/150.0); \n",x,y);
    N++;
    mx[N-1]=x; my[N-1]=y;
    }
}

int main(int argc, char**argv)
{///進階的main函式
    glutInit( &argc, argv );///初始化
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///2倍+3D
    glutCreateWindow("week04 mouse");///視窗

    glutDisplayFunc( display );///用來畫畫的函式
    glutMouseFunc( mouse );
glutMainLoop();

}







沒有留言:

張貼留言