2023年3月1日 星期三

rita - Week03 - 移動 Translate

    STEP01: 

        去到https://jsyeh.org/3dcg10/

        下載  1.[data]  2.[win32]  3.[glut32.dll]  三個檔案 並且解壓縮

        

        1.開啟codeblocks 17.12
        2.file => new => project 開啟GLUT project
        3.點選點點點選擇桌面  將檔名改成week03-1_translate
        4.下載葉老師上課用軟體freeglut壓縮檔
            將裡面的freeglut檔案複製到桌面
            再將裡頭lib的libfreeglut.a複製並貼上
            將複製的改檔名為libglut32.a
    
         5.再回到上一步選擇位置  選擇桌面/freeglut資料夾

    STEP02-1第一個程式

        #include <GL/glut.h>

        void display()
        {
                glPushMatrix();///備份的矩陣
                    glTranslated( 0.5, 0, 0);
                    glutSolidTeapot( 0.3 );

                glPopMatrix();///還原矩陣
                glutSwapBuffers();
           }
        int main(int argc, char *argv[])
        {
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
            glutCreateWindow("week03");

            glutDisplayFunc(display);

            glutMainLoop();
        }
        可讓茶壺往右移動


       STEP02-2第二個更改的程式版本

        #include <GL/glut.h>

        void display()
        {
                glPushMatrix();///備份的矩陣
                    glTranslated( 0.5, 0, 0);
                    glutSolidTeapot( 0.3 );

            glPopMatrix();///還原矩陣
            glutSwapBuffers();
        }
        #include <stdio.h>
        void mouse(int button,int state,int x,int y)
        {///請mouse函式幫忙
            printf("%d %d %d %d\n",button,state,x,y);
            ///button(左右鍵等),state(按下去是0,1)
        }
         int main(int argc, char *argv[])
    {
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
            glutCreateWindow("week03");

            glutDisplayFunc(display);
            glutMouseFunc(mouse);///請mouse函式幫忙
    
            glutMainLoop();
    }

       STEP02-3正式可以移動茶壺並且不出現殘影!

        #include <GL/glut.h>
        float X=0,Y=0;
        void display()
        {
            glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景,殘影
            glPushMatrix();///備份的矩陣
                glTranslated( X, Y, 0);
                glutSolidTeapot( 0.3 );

            glPopMatrix();///還原矩陣
            glutSwapBuffers();
           }
        ///#include <stdio.h>
        void mouse(int button,int state,int x,int y)
        {///請mouse函式幫忙
            X= (x-150)/150.0;///printf("%d %d %d %d\n",button,state,x,y);
            Y= -(y-150)/150.0;///口訣減一半,除一半,y負號
            ///button(左右鍵等),state(按下去是0,1)
        }
        int main(int argc, char *argv[])
        {
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
            glutCreateWindow("week03");
    
            glutDisplayFunc(display);
            glutMouseFunc(mouse);///請mouse函式幫忙

            glutMainLoop();
        }


            補充:gist.github.com  Gist功能
                        在裡頭的+新增一個不公開的小程式 Ex:week03-1.cpp檔
                        系統就會幫你用漂亮的排版  旁邊有個複製可把html網址複製下來
                        再到blogger左上角的筆切換成< >html檢視 再把網址貼上即可

        


         STEP02-4第二個程式

           利用原本茶壺的圖案在上面找點製作自己的圖
           做出一個小兔子
           #include <GL/glut.h>
           #include <stdio.h>
           void display()
           {
            ///glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景,殘影
            ///glPushMatrix();///備份的矩陣
            ///glTranslated( X, Y, 0);
            ///glutSolidTeapot( 0.3 );
               glBegin(GL_POLYGON);
                    glVertex2f(-0.208, 0.148);
                    glVertex2f(-0.244, 0.092);
                    glVertex2f(-0.272, 0.012);
                    glVertex2f(-0.304, -0.116);
                    glVertex2f(-0.228, -0.220);
                    glVertex2f(-0.100, -0.232);
                    glVertex2f(0.048, -0.232);
                    glVertex2f(0.196, -0.228);
                    glVertex2f(0.268, -0.168);
                    glVertex2f(0.296, -0.088);
                    glVertex2f(0.280, 0.016);
                    glVertex2f(0.244, 0.072);
                    glVertex2f(0.176, 0.152);
                    glVertex2f(0.052, 0.164);
                    glVertex2f(-0.112, 0.152);
                 glEnd();

             glBegin(GL_POLYGON);
                    glVertex2f(-0.204, 0.152);
                    glVertex2f(-0.212, 0.196);
                    glVertex2f(-0.228, 0.248);
                    glVertex2f(-0.236, 0.340);
                    glVertex2f(-0.224, 0.416);
                    glVertex2f(-0.168, 0.428);
                    glVertex2f(-0.140, 0.376);
                    glVertex2f(-0.140, 0.300);
                    glVertex2f(-0.132, 0.232);
                    glVertex2f(-0.132, 0.184);
                    glVertex2f(-0.124, 0.160);
            glEnd();

            glBegin(GL_POLYGON);
                    glVertex2f(0.084, 0.164);
                    glVertex2f(0.084, 0.216);
                    glVertex2f(0.076, 0.260);
                    glVertex2f(0.076, 0.332);
                    glVertex2f(0.084, 0.404);
                    glVertex2f(0.104, 0.428);
                    glVertex2f(0.140, 0.432);
                    glVertex2f(0.176, 0.424);
                    glVertex2f(0.180, 0.368);
                    glVertex2f(0.184, 0.304);
                    glVertex2f(0.188, 0.244);
                    glVertex2f(0.176, 0.208);
                    glVertex2f(0.160, 0.164);
                    glVertex2f(0.160, 0.160);
                glEnd();

                ///glPopMatrix();///還原矩陣
                glutSwapBuffers();
        }
        void mouse(int button,int state,int x,int y)
        {///請mouse函式幫忙
                    float X= (x-250)/250.0;
                    float Y= -(y-250)/250.0;///口訣減一半,除一半,y負號
                    if(state==GLUT_DOWN){
                printf("    glVertex2f(%.3f, %.3f);\n",X,Y);
            }
        }
        int main(int argc, char *argv[])
        {
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
            glutInitWindowSize(500,500);
            glutCreateWindow("week03");

            glutDisplayFunc(display);
            glutMouseFunc(mouse);///請mouse函式幫忙

            glutMainLoop();
    }



            

沒有留言:

張貼留言