2023年3月15日 星期三

 Week_05



glRotatef 最左邊可以轉到360 ~ -360之間 其中代表的x、y、z鏡頭轉動,是由鏡頭轉動來看車子本身,旁邊的三格分別代表x、y、z轉動幅度,可以把其中一個調成1來看他是怎麼轉動的

glTranslatef就很簡單鏡頭上下左右前後來看車子

glScalef就是車子的體積x、y、z變大變小

glBegin就是車子的程式而以不要管他

藉由程式來瞭解其中轉動的原因(程式來自上周第一個程式更改的
#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);///向右移動0.8
        glRotatef(angle,0,0,1);///旋轉方向
        glutSolidTeapot( 0.3 );
    glPopMatrix();/// 還原矩陣


    glColor3f(1,0,0);
glPushMatrix();///備份矩陣
        glTranslatef(-0.8,0,0);///向左移動0.8
        glRotatef(angle,0,1,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();
}

現在來看實做
#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);///step3把紅色又一向右上x,y各移動0.25
            glRotatef(angle, 0, 0, 1);///step2轉動
            glTranslatef(0.25,0.25,0.25);///step1把紅色放到旋轉中心

            glColor3f(1,0,0);
            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();
}

你可以把step 01、02、03個自一步一步做來看出變化



沒有留言:

張貼留言