2017年3月20日 星期一

Week04 藍振瑋 電腦圖學上課筆記

1.http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 下載檔案,先嘗試下圖學的移動、縮放、旋轉功能
data.zip→桌面\window\data\模型.obj
windows.zip→桌面\windiw\Transformation.exe
glut32.dll→桌面\window\glut32.dll
●將windows.zip先解壓,再把glut32.dll和data.zip解壓一起放到windows的資料夾

2.開啟GLUT專案,輸入上周的程式碼,比上周多一行新增:glTranlatef(0,0,0);,讓茶壺可以改變座標位置
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0.3,0.3,0);///追加的程式碼
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162664 Translate Rotate Scale");

    glutDisplayFunc(display);
    glutMainLoop();

}

3.新增motion程式碼能夠使用滑鼠移動茶壺的位置
#include <GL/glut.h>
float mouseX=0, mouseY=0;///x、y座標數值設定
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("04162664 Translate Rotate Scale");

    glutMotionFunc(motion);
    glutDisplayFunc(display);
    glutMainLoop();
}

4.修改程式碼,讓茶壺可以自由縮放旋轉
#include <GL/glut.h>
float mouseX=0, mouseY=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///backup the matrix
        glScalef(mouseX,mouseY,0);///Today's Most Important line
        glutSolidTeapot(0.3);
    glPopMatrix();///restore the matrix
    glutSwapBuffers();
}

void motion(int x, int y)
{
    mouseX = (x-150)/150.0;/// x/300.0
    mouseY = -(y-150)/150.0;/// y/300.0
    glutPostRedisplay();///貼個便利貼 Post便利貼,告訴GLUT
    ///要重畫畫面 Re-display
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("04162664 Translate Rotate Scale");

    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}


沒有留言:

張貼留言