2015年3月19日 星期四

week04_移動、旋轉、放大、縮小_呂登祐

本周重點: 移動、旋轉、放大、縮小

函式:

01.移動

          glTranslatef( x, y, z); ///對應位置分別是x,y,z象限的位置,f指浮點數float

02.旋轉

          glRotatef(角度  x, y, z);

03.放大縮小

          glScale( x, y, z);

***************************************************************************

運用01: 移動函式

#include <GL/glut.h>  ///呼叫GL/glut的功能

void display() ///用來畫東西的顯示函式
{
    glTranslatef(0.45, 0.7, 0); ///移動至畫面右上方
    glutSolidTeapot(0.3); ///用glut畫一個實心的茶壺
    glFlush(); ///把他沖出去(從記憶體把東西叫出來)
}
int main(int argc, char **argv) ///main()的參數,也可寫成int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutCreateWindow("林周罵尬李拚了!");  ///開一個glut視窗(小駱駝命名法)
    glutDisplayFunc(display);
    glutMainLoop(); ///glut的主要迴圈,卡住用的
    return 0;
}


運用02: 旋轉函式

#include <GL/glut.h>  ///呼叫GL/glut的功能

float angle=0;
void display() ///用來畫東西的顯示函式
{
    glClear(GL_COLOR_BUFFER_BIT);///清畫面
    glRotatef(angle,1, 1,0);
    glutWireTorus(0.3,0.7,30,30); ///用glut畫一個空心,其對應位置為(內徑r,半徑R,橫切,縱切)
    glFlush();
    angle+=2;
}
int main(int argc, char **argv) ///main()的參數,也可寫成int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutCreateWindow("林周罵尬李拚了!");  ///開一個glut視窗(小駱駝命名法)
    glutDisplayFunc(display);
    glutMainLoop(); ///glut的主要迴圈,卡住用的
    return 0;
}

進一步自動轉:

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);///因為畫面會亂,所以要清上個畫面
    glPushMatrix();              ///因為畫面會亂,所以要備份Matrix
    glRotatef(angle,1, 1,0);
    glutWireTorus(0.3,0.7,30,30); ///用glut畫一個空心,其對應位置為(內徑r,半徑R,橫切,縱切)
    glPopMatrix();              ///因為畫面會亂,所以要還原Matrix
    glFlush();
    angle+=0.1;

}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("林周罵尬李拚了!");
    glutDisplayFunc(display);
    glutIdleFunc(display); ///閒閒沒事做時,就去呼叫裡面的函式display()
    glutMainLoop();
    return 0;
}


沒有留言:

張貼留言