第三週
- 複習上週作業
- Q&A,動手玩Shape.exe
- 主題:滑鼠(mouse),鍵盤
- (主題):移動 Translate
動手玩Shape.exe
(1)從Facebook電腦圖學社團點選老師給的下載連結
連結 : http://jsyeh.org/3dcg10
(2)連結網址後下載data.zip, windows.zip, glut32.dll 三個檔案
(3) 到下載裡複製glut32.dll
(4)解壓縮windows.zip檔案
(5)把剛剛複製的glut32.dll貼上在解壓縮的windows檔案裡
(6)即可打開Shape.exe檔案
(7)打開後在右視窗按右鍵能切換模式及程式
(9)在右視窗按住頂點或顏色指數拖曳能改變頂點及色彩大小
滑鼠往左或往下拖曳點數會遞減
滑鼠往右或往上拖曳點數會遞增
TRIANGLE_STRIP[x]模式
(1)先製造出上禮拜的茶壺
程式碼 :
#include <stdio.h>
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03 Mouse");
glutDisplayFunc(display);
//glutMouseFunc(mouse);
//glutMotionFunc(motion);
glutMainLoop();
}
(2)按下滑鼠能直接知道座標位址
*紅色區塊為增加的程式碼
程式碼 :
#include <stdio.h>
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
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("Week03 Mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
//glutMotionFunc(motion);
glutMainLoop();
}
(3)增加紅色區塊程式碼能直接得到座標的程式碼
程式碼 :
#include <stdio.h>
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
//printf("%d %d %d %d\n",button,state,x,y);
if(state==GLUT_DOWN)
printf(" glVertex2f(%f, %f);\n",(x-150)/150.0,(150-y)/150.0);
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03 Mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
//glutMotionFunc(motion);
glutMainLoop();
}
(5)移動茶壺(移動時滑鼠游標可在茶壺的任何地方)
程式碼 :
#include <stdio.h>
#include <GL/glut.h>
float teapotX=0,teapotY=0;
int oldX=0, oldY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
oldX=x; oldY=y;
}
void motion(int x,int y)
{
teapotX+=(x-oldX)/150.0; teapotY+=(oldY-y)/150.0;
oldX=x; oldY=y;
glutPostRedisplay();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week03 Mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
















沒有留言:
張貼留言