2023年3月1日 星期三

Week03 移動

Week03

下載上課資料

https://jsyeh.org/3dcg10/

下載
- data
- win32

解壓縮
- windows.zip =>下載\windows\Transformation.exe
- data.zip =>下載\windows\data\

執行課本範例 Transformation.exe

執行時, 可移動 x y z 座標


執行上週教的GLUT程式

加上glTranslate(x,y,z) 讓他移動,再把
glPushMatrix() 放前面 glPopMatrix() 放後面, 把他們包起來

- 把 freeglut裝好
- File-New-Project,GLUT專案
- 把上週10行程式碼輸進去, 加上glTranslate(x,y,z) 改變位置
- 前面加上glPushMatrix() , 後面加上glPopMatrix().

#include <GL/glut.h>
void display()
{
    glPushMatrix(); ///備份矩陣
        glTranslatef(0.5, 0, 0); ///移動
        glutSolidTeapot( 0.3 );
    glPopMatrix(); ///還原矩陣

    glutSwapBuffers();
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week03");

    glutDisplayFunc(display);

    glutMainLoop();
}


Mouse函式

#include <GL/glut.h>
float X=0, Y=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清除背景
    glPushMatrix(); ///備份矩陣
        glTranslatef( X, Y, 0); ///移動
        glutSolidTeapot( 0.3 );
    glPopMatrix(); ///還原矩陣
    glutSwapBuffers();
}

void mouse(int button, int state, int x ,int y)
{
    X = (x-150)/150.0;
    Y = -(y-150)/150.0; ///減一半、除一半
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("week03");

    glutDisplayFunc(display);
    glutMouseFunc(mouse); ///請mouse函式幫忙

    glutMainLoop();
}


Github Gist

用滑鼠幫忙畫圖

#include <GL/glut.h>
float X=0, Y=0;
void display()
{
    glutSwapBuffers();
}

#include <stdio.h> ///記得加上才能使用printf
void mouse(int button, int state, int x ,int y)
{
    X = (x-250)/250.0;
    Y = -(y-250)/250.0;
    if(state==GLUT_DOWN)  ///只有按下mouse 才印出程式
    {
        printf("    glVertex2f(%.3f, %.3f);\n", X, Y);
    }
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
    glutInitWindowSize(500,500); ///視窗加大 所以一半是250
    glutCreateWindow("week03");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();

}






沒有留言:

張貼留言