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多邊形等程式做圖





沒有留言:
張貼留言