2018年3月26日 星期一

week05*小紅帽槓上大野狼

旋轉、TRT特定轉軸、

*旋轉再移動(由下往上看)
  -原地自轉
  -

*移動再旋轉(由下往上看)
  -  -繞著中心點公轉
  -

*從下往上看
  -


*自轉VS公轉
  -自轉
  -
  -公轉
  -

*建立一個茶壺
  -#include <GL/glut.h>  ///使用GLUT外掛
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glutSolidTeapot(0.3);///茶壺大小0.3
    glutSwapBuffers();
}
int main(int argc , char**argv)  ///進階的main()參數(個數,字串)

{
    glutInit(&argc,argv);  ///進階參數,初始GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);  ///開起2種模式
    glutCreateWindow("05160965");  ///盡量不要用中文
    glutDisplayFunc(display);
    glutMainLoop();  ///主要迴圈
}
  -

*建立一個會轉動的茶壺
  -float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
    glPushMatrix();///備份矩陣(乾淨的矩陣)
        glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
        glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
        glutSolidTeapot(0.3);///茶壺大小0.3
    glPopMatrix();///還原矩陣
    glutSwapBuffers();
}


void motion(int x,int y)
{
    angle=x;///較不優的方法
    glutPostRedisplay();///請動畫重畫
}
  -

*建立兩個會轉動的茶壺
  -void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
    glPushMatrix();///備份矩陣(乾淨的矩陣)
        glutSolidTeapot(0.3);///放在中間

        glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
        glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
        glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
        glutSolidTeapot(0.3);///柄在畫面中心的茶壺
    glPopMatrix();///還原矩陣
    glutSwapBuffers();
}
  -

*建立三個會轉動的茶壺
  -void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
    glPushMatrix();///備份矩陣(乾淨的矩陣)
        glutSolidTeapot(0.3);///放在中間

        glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
        glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
        glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
        glutSolidTeapot(0.3);///柄在畫面中心的茶壺


        glPushMatrix();///備份矩陣
            glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
            glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
            glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
            glutSolidTeapot(0.3);///柄在畫面中心的茶壺
        glPopMatrix();///還原矩陣

    glPopMatrix();///還原矩陣

    glutSwapBuffers();
}
  -

*建立很多個會轉動的茶壺
  -glPushMatrix();///上手臂
            glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
            glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
            glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
            glutSolidTeapot(0.3);///柄在畫面中心的茶壺


            glPushMatrix();///下手肘
                glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
                glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
                glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
                glutSolidTeapot(0.3);///柄在畫面中心的茶壺
            glPopMatrix();///還原矩陣
    glPopMatrix();///還原矩陣

    glPushMatrix();///上手臂
            glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
            glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
            glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
            glutSolidTeapot(0.3);///柄在畫面中心的茶壺


            glPushMatrix();///下手肘
                glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
                glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
                glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
                glutSolidTeapot(0.3);///柄在畫面中心的茶壺
            glPopMatrix();///還原矩陣
    glPopMatrix();///還原矩陣
  -
*程式碼
  -#include <GL/glut.h>  ///使用GLUT外掛
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
    glPushMatrix();///備份矩陣(乾淨的矩陣)
        glutSolidTeapot(0.3);///放在中間
        glPushMatrix();///上手臂
            glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
            glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
            glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
            glutSolidTeapot(0.3);///柄在畫面中心的茶壺


            glPushMatrix();///下手肘
                glTranslatef(0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
                glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
                glTranslatef(0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
                glutSolidTeapot(0.3);///柄在畫面中心的茶壺
            glPopMatrix();///還原矩陣
    glPopMatrix();///還原矩陣

    glPushMatrix();///上手臂
            glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
            glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
            glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
            glutSolidTeapot(0.3);///柄在畫面中心的茶壺


            glPushMatrix();///下手肘
                glTranslatef(-0.5,0.15,0);///把會旋轉的茶壺柄,放在右上角
                glRotated(angle,0,0,1);///rotate/translate/scale不會把矩陣改變
                glTranslatef(-0.45,-0.08,0);///移動,讓茶壺的柄,放到畫面中心
                glutSolidTeapot(0.3);///柄在畫面中心的茶壺
            glPopMatrix();///還原矩陣
    glPopMatrix();///還原矩陣

    glPushMatrix();///備份矩陣(乾淨的矩陣)
    glutSwapBuffers();
}
void motion(int x,int y)
{
    angle=x;///較不優的方法
    glutPostRedisplay();///請動畫重畫
}
int main(int argc , char**argv)  ///進階的main()參數(個數,字串)
{
    glutInit(&argc,argv);  ///進階參數,初始GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);  ///開起2種模式
    glutCreateWindow("05160965");  ///盡量不要用中文
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();  ///主要迴圈
}

沒有留言:

張貼留言