2023年3月1日 星期三

CodeTalker week03

 week03

STEP01

1.至https://jsyeh.org/3dcg10/下載data,window32,glut32.dll

2.到下載去解壓縮

3.執行Transformation.exe,並且data裡有很多的模型檔案


STEP02

1.打開 CodeBlock,File/New/project

2.複製week02的十行得到上圖


STEP03

1.加上3行得到下列程式碼

#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();


}

2.執行程式得到一個偏右的茶壺


STEP04

1.做宣告準備好我們要用的東西,並且印出來看

#include <stdio.h>

void mouse(int button,int state,int x,int y)

{

    printf("%d %d %d %d\n",button,state,x,y);

}

2.在底下呼叫mouse函式,得程式碼:

#include <GL/glut.h>


void display()


{

    glPushMatrix();//備份矩陣

        glTranslatef(0.5, 0, 0);

        glutSolidTeapot( 0.3 );

    glPopMatrix();//還原矩陣


glutSwapBuffers();

}

#include <stdio.h>

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_RGB | GLUT_DOUBLE | GLUT_DEPTH);


glutCreateWindow("week03");


glutDisplayFunc(display);

glutMouseFunc(mouse);


glutMainLoop();


}

3.執行後,隨機點擊並觀察小黑,第一個數字是左鍵或著右鍵等,第二個數字0是按下,1是放開,剩下的3跟4分別是X,Y座標


STEP04

1.準備X,Y

2.修改成glTranslatef(X, Y, 0);

3.在宣告mouse函數的地方,加上

X=(x-150)/150.0;

Y=-(y-150)/150.0;

計算XY 口訣:減一半,除一半,Y變負號

4.執行發現茶壺會增殖,再加上glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);做清除背景

最後得到程式碼:

#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);


glutMainLoop();


}


STEP05

1.glutInitWindowSize(1000,1000); 調整視窗大小

注:XY要跟隨視窗大小調整

2.if(state==GLUT_DOWN){

        printf("    glVertex2f(%.3f, %.3f ;\n",X,Y);

    }

設定滑鼠點擊,顯示滑鼠點擊位置座標

3.加上標準輸出輸入,讓printf有用


就可以藉由滑鼠點擊獲得頂點,複製貼上,然後配合GL多邊形等程式做圖



沒有留言:

張貼留言