2022年3月14日 星期一

學習筆記 week04

 今天是第四週

這次會用到新的資料。先去 https://jsyeh.org/3dcg10/ 下載data.zip 然後解壓縮
記得上次的windows資料夾嗎?把壓縮檔移動到那裡然後進行解壓縮。
data裡面還有一個data資料夾,請將它移動到上一個資料夾裡面(直接取代)。
打開transformation.exe,裡面的數值可以調整攝影機的狀態。
本週的重點是translate,其他的之後會慢慢加入。

新增一個OpenGL專案,將main.cpp的程式碼全刪掉,換成以下的:


#include <GL/glut.h>
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();

        glTranslatef(0.3,0.2,0);

        glColor3f(1,0,0);
        glutSolidTeapot(0.3);

    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04_1");

    glutDisplayFunc( display );

    glutMainLoop();
    return 0;
}

執行後會出現一個紅色的茶壺。
Translate的效果有幾點要注意:

接下來,我們要用滑鼠來找座標。

#include <GL/glut.h>
#include <stdio.h>
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

}
void mouse(int button, int state,int x,int y)
{
    printf("%d %d %d %d\n",button,state,x,y);
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04_2");

    glutDisplayFunc( display );
    glutMouseFunc(mouse);

    glutMainLoop();
    return 0;
}

執行時不會有任何東西出現,現在你的每一個點擊都會被記錄起來。(0=左鍵,1=滾輪鍵,2=右鍵)


#include <GL/glut.h>
#include <stdio.h>
int mouseX=0,mouseY=0;
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,0);
    glPushMatrix();
        glTranslatef( (mouseX-150)/150.0,-(mouseY-150)/150.0,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();

}
void mouse(int button, int state,int x,int y)
{
    printf("%d %d %d %d\n",button,state,x,y);
    mouseX=x;
    mouseY=y;
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04_2");

    glutDisplayFunc( display );
    glutMouseFunc(mouse);

    glutMainLoop();
    return 0;
}

現在這個茶壺會隨著鼠標點擊位置移動了










沒有留言:

張貼留言