2023年3月15日 星期三

rita - week05 - T-R-T 對特定軸轉動

    去到https://jsyeh.org/3dcg10/ 下載[data][win32] /將data資料夾放在window裡面


    

    開啟transformation.exe試試看
    車車1:


    綠色的部分:0.33原本是0(移動到右邊的)
    紅色的部分:第一個0.0部分是旋轉用的(旋轉)
    黃色的部分:1.49是將車子拉長長胖(長胖的)
    藍色的部分:這台藍色車子(藍色車子)
   
    車車2:(改變旋轉移動軸)

 
    紅色的部分:第一個141.0部分是旋轉用的(整個旋轉)
綠色的部分:0.64原本是0(移動到右邊的)
    黃色的部分:1.49是將車子拉長長胖(長胖的)
    藍色的部分:這台藍色車子(藍色車子)

    第一個程式

    去到桌面葉老師上課用軟體 / 將freegult壓縮檔解壓縮 / 將freegult資料夾放置桌面  
    將freegult 內的lib內的 / libfreegult.a複製 / 改名為libgult32.a
    新增一個glut專案 / 取名為week05-1_TRT_rotate_translate

        ///week05-1_TRT_rotate_translate
        ///把上週week04-1拿來用
        #include <GL/glut.h>
        float angle=0;
        void display()
        {
                glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景

                glColor3f(0,1,0);///綠色的
                glPushMatrix();
                        glTranslatef(0.8,0,0);///最後是綠色的移動
                        glRotated( angle, 0, 0, 1);///改對z軸轉
                        glutSolidTeapot( 0.3 );
                glPopMatrix();

                glColor3f(1,0,0);///紅色的
                glPushMatrix();
                        glRotated( angle, 0, 0, 1);///改對z軸轉///最後是紅色的轉動
                        glTranslatef(0.8,0,0);
                        glutSolidTeapot( 0.3 );
                glPopMatrix();

                glutSwapBuffers();
                angle++;
            }
            int main(int argc, char *argv[])
            {
                glutInit(&argc, argv);
                glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                glutCreateWindow("week05");

                glutDisplayFunc(display);
                glutIdleFunc(display);
                glutMainLoop();
             }


        第二個程式(使用老師的範例)

            使用老師傳的processing範例 / 畫出身體、頭以及手臂 / 按空白鍵使手臂轉動
            (但是要換成英文輸入法)   

1.尚未旋轉↑


2.旋轉手臂


3.把旋轉中心放置在徵中心


4.把轉動的手臂,掛在肩膀上



5.再世界對z軸旋轉,手臂擺好後像,關節在轉動

        下週3/22考試!!!
     
        glPushMatrix();
        glTranslatef(-0.5,0.9,0);     (3)最後,把轉動的手肘,掛到正確的位置
        glRotate(-45,0,0,1);            (2)轉動,要小心正負號,還有轉動軸
        glTranslatef(-0.8,0.9,0);     (1)把手肘中心,放到世界中心
        drawHand();
        glPopMatrix();
        每一條都20分 

        第三個程式

         ///week05-1_TRT_robot 使用week05-1的程式
         ///畫出大的身體、手臂
         #include <GL/glut.h>
        float angle=0;
        void display()
        {
                glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景

                glColor3f(0,1,0);///綠色的身體
                glPushMatrix();
                        glutSolidCube(0.5);
        
                        glPushMatrix();
                                    glTranslatef(0.25,0.25,0);///(3)把整個東西掛在右上角
                                    glRotated(angle,0,0,1);///(2)轉動
                                    glTranslatef(0.25,0.25,0);///(1)把旋轉中心放到中心
                                    ///glTranslatef(0.5,0.5,0);///step03-3先註解掉
                                    glColor3f(1,0,0);///紅色的手臂
                            glutSolidCube(0.5);
                    glPopMatrix();
                glPopMatrix();

                glutSwapBuffers();
                angle++;///角度++
            }
        int main(int argc, char *argv[])
        {
                glutInit(&argc, argv);
                glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                glutCreateWindow("week05");

                glutDisplayFunc(display);
                glutIdleFunc(display);
                glutMainLoop();
        }        




沒有留言:

張貼留言