2017年3月21日 星期二

Week 05 彣禎的上課筆記

1.主題:移動Translate.旋轉Rotate.縮放Scale


(2)把windows.data解壓縮,再把data資料夾和glut32.dull放到windows資料裡

(3)再打開Transformation檔案

2.會移動的茶壺(用座標移動)

(1)用Code Blocks開啟GLUT方案(freeglut),再修改程式碼
多加glPushMatrix(); ///備份起來       
glTranslatef(0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix(); ///還原回去

3.會移動的茶壺(用滑鼠拖移移動)

#include <GL/glut.h>
float mouseX=0,mouseY=0;static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);   
    glPushMatrix(); ///備份起來       
    glTranslatef(mouseX,mouseY,0);
    glutSolidTeapot(0.3);
    glPopMatrix(); ///還原回去
    glutSwapBuffers();
}
void motion(int x,int y)
{
    mouseX=(x-150)/150.0;
    mouseY=-(y-150)/150.0;
    glutPostRedisplay();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
    return EXIT_SUCCESS;
}

 4.會縮放的茶壺

glTranslatef(mouseX,mouseY,0); 改成glScalef(mouseX,mouseY,0);
#include <GL/glut.h>
float mouseX=0,mouseY=0;
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); ///清除舊的畫面   
    glPushMatrix(); ///備份起來
        glScalef(mouseX,mouseY,0); ///改Size縮放
        glutSolidTeapot(0.3);
    glPopMatrix(); ///還原回去
    glutSwapBuffers(); ///交換繪圖的memory buffer,才能畫出來
}
void motion(int x,int y)
{
    mouseX=(x-150)/150.0;
    mouseY=-(y-150)/150.0;
    glutPostRedisplay(); ///貼一張3M Post便利貼,告訴電腦的GLUT要重畫畫面Re display
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
    return EXIT_SUCCESS;
}

5.會旋轉的茶壺

滑鼠沿著X軸旋轉

#include <GL/glut.h>
float mouseX=0,mouseY=0,rotX=0;
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); ///清除舊的畫面   
    glPushMatrix(); ///備份起來
        //glScalef(mouseX,mouseY,0); ///改Size縮放
        glRotatef(rotX,0,0,1);       
    glutSolidTeapot(0.3);
    glPopMatrix(); ///還原回去
    glutSwapBuffers(); ///交換繪圖的memory buffer,才能畫出來
}
void motion(int x,int y)
{
    mouseX=(x-150)/150.0;
    mouseY=-(y-150)/150.0;
    rotX=x;
    glutPostRedisplay(); ///貼一張3M Post便利貼,告訴電腦的GLUT要重畫畫面Re display
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
    return EXIT_SUCCESS;
}

 6.去試Transformation.exe改軸(x,y,z),並猜測會往哪邊轉










沒有留言:

張貼留言