2023年3月15日 星期三

Deverra//week05特定軸轉

 WEEK05---TNT特定軸轉


老師的網址>>  https://jsyeh.org/3dcg10/


打開transformation.exe檔觀察

可以理解為--白框(車子)--橘框(變形的)---藍框(轉動)---黃框(移動的)

此時的藍框代表的轉動是以車子中心為轉軸

**黃框>>移動到右邊**
**橘框>>讓他變胖**

試著把前2排調換看看兩者的差別

此時的藍框代表的轉動是以畫面中心點為轉軸

--------------------------------------------------------------------------------------------------------------------------

▨第一個程式碼嘗試令上週的茶壺旋轉起來

#include <GL/glut.h>
float angle=0;  
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(0,0.3,0.7);
    glPushMatrix();
        glTranslatef(0.8,0,0);
        glRotatef(angle,0 ,0 ,1);
        glutSolidTeapot( 0.3 );
    glPopMatrix();

    glColor3f(0.8,0,0.4);
     glPushMatrix();
        glRotatef(angle,0 ,0 ,1);
        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("GLUT Shapes");
  glutDisplayFunc(display);
  glutIdleFunc(display);
  glutMainLoop();
}



紫色茶壺改為對Z軸做旋轉
紅色茶壺的轉動往右移

-----------------------------------------------------------------------------------------------------------------------------

▨嘗試了解TRT 利用老師寫的畫圖程式畫出小人來理解

利用老師寫的Processing>>opengl_TRT檔案,畫出小人>>把移動的方塊都拉出來
黃色小手目前是以原點為中心做旋轉


因為現在的手是以中心在原點做旋轉 我們希望轉動自然一點
移動到原點( 第一個Trans1) 
再把轉動拉回來(Rotate) 令小手對Z軸做旋轉運
再把小手移至目標位置(Trans2)


黃色小手目前是以肩關節的位置做旋轉

-----------------------------------------------------------------------------------------------------------------------------

▨下週小考題目---TRT

glPushMartix();
glTranslatef(-0.5,-0.9);     //最後的中心點
glRotate(-45,0,0,1);     //轉動多少度
glTranslatef(-0.8,0.9);    //把原本的中心點移到原點(如果原本是1,-1)>>(-1,1)
drawHand();
glPopMartix();

-----------------------------------------------------------------------------------------------------------------------------

▨努力理解TRT 利用小方塊理解旋轉中心

#include <GL/glut.h>
float angle=0;  //給角度初始值=0
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,0.2,0.2);
    glPushMatrix();
        glutSolidCube(0.5);
    glPushMatrix();
        glTranslatef(0.25,0.25,0);    //掛到右上角
        glRotatef(angle,0,0,1);    //旋轉
        glTranslatef(0.25,0.25,0);    //把旋轉中心放到中間
      //  glTranslatef(0.5,0.5,0);//把移動取消
        glColor3f(0,0.4,0.5);
        glutSolidCube(0.5);
    glPopMatrix();
    glutSwapBuffers();
    angle++;  //角度加加(轉起來)
}
int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  glutCreateWindow("GLUT Shapes");
  glutDisplayFunc(display);
  glutIdleFunc(display);
  glutMainLoop();
}


把中心點放至中間(T1)


把中心點移至右上(T2)

-----------------------------------------------------------------------------------------------------------------------------






沒有留言:

張貼留言