2022年5月9日 星期一

Yiting_week12

 1.模型自轉v.s.公轉

glTranslatef(0.8,0,0); 

glRotatef(角度,0,1,0);

///模型在自轉


v.s.


glRotatef(角度,0,1,0);

glTranslatef(0.8,0,0);

///模型繞著中心點轉動




       

粉色:模型                                                                     粉色:模型  
橘色:大小                                                                     橘色:大小
綠色:被移到某地的                                                     綠色:自己旋轉中的
黃色:整個轉動                                                             黃色:被移到某地的



2.旋轉物件

2-1:茶壺手把在中心

程式碼:
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0.4,-0.07,0);///移動
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12");

    glutDisplayFunc(display);
    glutMainLoop();
}


2-2:茶壺手把不但在中心,還能旋轉

程式碼:
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glRotatef(angle,0,0,0.1);///旋轉,依後面數值決定如何旋轉
        glTranslatef(0.4,-0.07,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
    angle+=0.1;///調整速度,數字越大,速度越快
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}

2-3:一個會動的小茶壺&一個不會動的大茶壺
大茶壺不會旋轉的原因:因為沒加上旋轉的程式碼

程式碼:
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);///白色
    glutSolidTeapot(0.3);///大茶壺
    glPushMatrix();
        glTranslatef(0,0,0);///把物件放在某處
        glRotatef(angle,0,0,0.1);
        glTranslatef(0,0,0);///將把手移到中心
        glColor3f(1,0,0);///紅色
        glutSolidTeapot(0.2);///小茶壺
    glPopMatrix();
    glutSwapBuffers();
    angle+=0.5;///調整速度
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week12");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}







沒有留言:

張貼留言