2022年3月14日 星期一

Jeremy notes week04


    step01:下載win32、data檔案,解壓縮,將data資料夾丟入                      win32資料夾中,執行Transformation




    step02:右側介面按右鍵可更換模型,下方介面可調各種參數



2.移動的茶壺
    step01:建立GLUT專案,刪掉所有程式碼,打上下列程式碼

        #include <GL/glut.h>
        void display()
        {
                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                glPushMatrix();
                    glTranslatef(0.3,0.2,0);
                    glColor3f(1,0,0);
                    glutSolidTeapot( 0.3 );
                glPopMatrix();
                glutSwapBuffers();
        }

        int main(int argc, char**argv)
        {
                glutInit( &argc,argv );
                glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
                glutCreateWindow("week04_translate");

                glutDisplayFunc(display);

                glutMainLoop();
                return 0;
        }


        step02:三角形齒輪執行


3.四個茶壺
    step01:修改原有程式碼,改成下列程式碼

        #include<GL/glut.h>
        void myTeapot(float x,float y)
        {
            glPushMatrix();
                glTranslated(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();
        }

        int main(int argc,char**argv)
        {
            glutInit( &argc,argv );
            glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
            glutCreateWindow("week04_translate");

            glutDisplayFunc(display);

            glutMainLoop();
            return 0;
        }


        step02:三角形齒輪執行


4.滑鼠事件
    step01:建立GLUT專案,刪掉所有程式碼,打上下列程式碼

        #include <GL/glut.h>
        #include <stdio.h>
        void display()
        {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            glutSwapBuffers();
        }
        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)
        {
            glutInit( &argc,argv );
            glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
            glutCreateWindow("week04 mouse");

            glutDisplayFunc(display);
            glutMouseFunc(mouse);
            glutMainLoop();
            return 0;
        }


        step02:三角形齒輪執行,滑鼠點擊的位置會變成座標,0
        代表左鍵、1代表中鍵、2代表右鍵         
 

 5.滑鼠事件結合茶壺
     step01:修改滑鼠事件程式碼,改成下列程式碼 
     
        #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)
        {
            // printf("%d %d %d %d\n",button,state,x,y);
            mouseX= x; mouseY= y;
        }

        int main(int argc, char**argv)
        {
            glutInit( &argc, argv );
            glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
            glutCreateWindow("week04 mouse");

            glutDisplayFunc(display);
            glutMouseFunc(mouse);
            glutMainLoop();
            return 0;
        }

    
        step02:三角形齒輪執行,黃色茶壺會移動到滑鼠點擊的位置


6.滑鼠畫圖
    step01:修改滑鼠事件結合茶壺程式碼,改成下列程式碼

        #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)
        {
            // printf("%d %d %d %d\n",button,state,x,y);
            mouseX=x; mouseY=y;
            if(state==GLUT_DOWN){
                printf("  glVertex2f((%d-150)/150.0, -(%d-150)/150.0);\n",x,y);
                N++;
                mx[N-1]=x; my[N-1]=y;
            }
        }
        int main(int argc, char**argv)
        {
            glutInit( &argc,argv );
            glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
            glutCreateWindow("week04 mouse");

            glutDisplayFunc(display);
            glutMouseFunc(mouse);
            glutMainLoop();
            return 0;
        }


       step02:三角形齒輪執行,利用滑鼠點擊產生圖案、程式碼


沒有留言:

張貼留言