2019年3月15日 星期五

電腦圖學---4

電腦圖學---4

⧭旋轉
開啟 transfomation  
使用glRotatef  ( 數值 ,  x,   y,   z)
第一個數值是  旋轉的角度x y z  是 旋轉  x y z   的角度



打開 codeBlock

 ⧫ glTranslatef 移動
(讓茶壺跟著滑鼠移動)

程式碼
#include <GL/glut.h>
float x=0,y=0; ///設X Y軸變數
void display ()
{
    ///glut開頭,表示是GLUT的程式
    /// glPushMatrix(); glPopMatrix(); 通常會做縮排
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();  ///備份矩陣,保護
        glTranslatef((x-150)/150.0, -(y-150)/150.0 ,0);///Translate 移動 X Y Z,f是浮點數        glutSolidTeapot(0.3);
    glPopMatrix(); ///還原矩陣,保護
    glutSwapBuffers();
}
void motion(int nowx, int nowy)
{
    x=nowx; y=nowy; ///更新X Y
    display(); ///再畫display(),用滑鼠移動畫面會跟著動
}
int main(int argc,char**argv) ///main參數
{
    glutInit(&argc, argv);  ///啟動GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);  ///啟動GLUT的Display的Mode模式 : 兩倍Buffer,有3D的深度
    glutCreateWindow("Week03 translate");
    glutDisplayFunc(display);  ///Display的函式是display
    glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
    glutMainLoop();
}

     ⧫把glTranslatef 改成 glRotatef 

(讓茶壺從移動變成旋轉)

程式碼
#include <GL/glut.h>
float x=0,y=0; ///設X Y軸變數
void display ()
{
    ///glut開頭,表示是GLUT的程式
    /// glPushMatrix(); glPopMatrix(); 通常會做縮排
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清顏色跟3D
    glPushMatrix();  ///備份矩陣,保護
        glRotatef(x, 0, 1 ,0);  ///Rotate 旋轉
        glutSolidTeapot(0.3);
    glPopMatrix(); ///還原矩陣,保護
    glutSwapBuffers();
}
void motion(int nowx, int nowy)
{
    x=nowx; y=nowy; ///更新X Y
    display(); ///再畫display(),用滑鼠移動畫面會跟著動
}
int main(int argc,char**argv) ///main參數
{
    glutInit(&argc, argv);  ///啟動GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);  ///啟動GLUT的Display的Mode模式 : 兩倍Buffer,有3D的深度
    glutCreateWindow("Week03 translate");
    glutDisplayFunc(display);  ///Display的函式是display
    glutMotionFunc(motion); ///滑鼠有動作motion時,要叫motion()
    glutMainLoop();
}

沒有留言:

張貼留言