2023年3月16日 星期四

Week 05 Zhou

 Week05



把上週的教材從 https://jsyeh.org/3dcg10/ 下載windows.zip以及data 
並且把windows解壓縮把data資料夾丟入windows資料夾
 執行 Transformation.exe




觀察剛剛的transformation.exe ,
可以交換 translate 和 rotate的程式
可以造出 公轉 與 自轉的差別 





開啟CodeBlocks 並開啟GLUT專案 並下載把freeglut解壓縮
且把libfreeglut.a 複製改成libglut32.a
複製上週的week04-1的程式碼
並修改為以下程式碼
#include <GL/glut.h>
float angle = 0;
void display()
{

    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);

    glColor3f(1,0,0);            紅色
    glPushMatrix();
        glRotatef(angle,0 ,0 ,1);            改為 0, 0, 1   Z軸
        glTranslatef(0.8 , 0, 0);
        glutSolidTeapot( 0.3 );


    glPopMatrix();

    glColor3f(0,1,0);
    glPushMatrix();
        glTranslatef(0.8 , 0, 0);            移動到右邊
        glRotatef(angle*1.5,0 ,0 ,1);            改成angle*1.5          Z軸
        glutSolidTeapot( 0.3 );


    glPopMatrix();


    glutSwapBuffers();
    angle++;
}


int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week04");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}

就會出現以下畫面囉
觀察兩個茶壺的運行軌跡




打開老師的 opengl_TRT_demo 的互動城市 跑起來
按 ToDraw 劃一個身體和手 利用translate和rotate調整
旋轉中心讓手臂掛在肩膀上旋轉
執行看看


在劃一個圖 劃一個手臂 再利用translate和rotate的點
來調整手臂的旋轉位置
就會變成下圖顯示畫面


接著開啟codeblocks 開啟一個新的GLUT專案 
接著複製貼上剛剛week05-1的程式碼
接著修改裡面的程式碼
要試著做出一個會旋轉手臂的機器人
先做出一個細長的長方形當成手臂
接著把translate和rotate調整好讓關節在正中心
新增一個新的白色大方塊當成機器人的身體
接著把調整好的手臂掛在身體的左右上角
試著執行程式碼

#include <GL/glut.h>
float angle = 0;
void myCube()
{
    glPushMatrix();
        glScalef(0.5, 0.2, 0.2);        /// STEP1 條大小
        glutSolidCube(1);           /// STEP1正方塊
    glPopMatrix()                    ;/// STEP1
}
void display()
{

    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);           /// STEP4白色的
    glutSolidCube(1);           /// STEP4身體

    glPushMatrix();
        glTranslatef(0.5, 0.5, 0);        /// STEP5 把手臂移動到右上角
        glRotatef(angle,0 ,0 ,1);        ///轉她   STEP2
        glTranslatef(0.25, 0, 0);            ///step3 往右移動0.25 讓關節在政中心
        glColor3f(0,1,0);               ///step4 綠色的
        myCube();                       /// STEP2
    glPopMatrix();                      /// STEP2


     glPushMatrix();
        glTranslatef(-0.5, 0.5, 0);            /// STEP5 把手臂移動到右上角
        glRotatef(angle,0 ,0 ,1);            ///轉她   STEP2
        glTranslatef(0.25, 0, 0) ;            ///step3 往右移動0.25 讓關節在政中心
        glColor3f(0,1,0);                   ///step4 綠色的
        myCube();                             /// STEP2
    glPopMatrix();                          /// STEP2

    glutSwapBuffers();
    angle++;
}


int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week04");
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();
}


執行畫面如下 兩個手臂會掛在機器人的
身體的左右上方來旋轉













沒有留言:

張貼留言