2017年3月21日 星期二

Week 05 宋小胖的上課筆記

1.先了解今日上課內容目的


先到這個網址jsyeh/3dcg10/
然後下載[data][win32]glut32.dll
再把win32解壓縮
將data跟glut32.dll丟進去
之後開啟Transformation.exe檔案
就可以執行這個程式囉


2.移動Translate


先印出茶壺


程式碼加上
glPushMatrix();//備份起來
        glTranslatef(0,1,0);
glPopMatrix();//還原回去
這樣執行出來就可以移動了
程式碼:
#include <GL/glut.h>
void display()
{
    glPushMatrix();//備份起來
        glTranslatef(0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();//還原回去
    glutSwapBuffers();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162550 translate rotate scale");
    glutDisplayFunc(display);

    glutMainLoop();
}


3.會隨著滑鼠做動作的茶壺



用上面的程式碼再多加幾行
茶壺就可以隨著滑鼠移動了
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glTranslatef(mouseX,mouseY,0);
void motion(int x,int y){
    mouseX=(x-150)/150.0;
    mouseY=-(y-150)/150.0;
    glutPostRedisplay();
}
glutMotionFunc(motion);
這樣就可以移動了


程式碼:
#include <GL/glut.h>
float mouseX=0,mouseY=0;
void display()
{
    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("04162550 translate rotate scale");
    glutDisplayFunc(display);

    glutMotionFunc(motion);

    glutMainLoop();
}
4.縮放茶壺


可以讓茶壺變大變小翻過來翻過去
超酷的!!

程式碼:#include <GL/glut.h>
float mouseX=0,mouseY=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清掉舊的畫面
    glPushMatrix();//備份起來
        glScalef(mouseX,mouseY,0);//改size縮放
        glutSolidTeapot(0.3);
    glPopMatrix();//還原回去
    glutSwapBuffers();//交換繪圖的mmory buffer,才能輸出來
}
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("04162550 translate rotate scale");
    glutDisplayFunc(display);

    glutMotionFunc(motion);

    glutMainLoop();
}

5.旋轉茶壺

增加旋轉的幾行程式
rotX=0;
glRotatef(rotX,0,0,1);
rotX=x;
程式碼:#include <GL/glut.h>
float mouseX=0,mouseY=0,rotX=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清掉舊的畫面
    glPushMatrix();//備份起來
        glRotatef(rotX,0,0,1);
        glutSolidTeapot(0.3);
    glPopMatrix();//還原回去
    glutSwapBuffers();//交換繪圖的mmory buffer,才能輸出來
}
void motion(int x,int y)
{
    mouseX=(x-150)/150.0;
    mouseY=-(y-150)/150.0;
    rotX=x;
    glutPostRedisplay();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162550 translate rotate scale");
    glutDisplayFunc(display);

    glutMotionFunc(motion);

    glutMainLoop();


}



沒有留言:

張貼留言