複習上週茶壺程式碼😝
#include <GL/glut.h>
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char ** argv)
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMainLoop();
}
增加以下黃底程式碼後
#include <GL/glut.h>
#include <stdio.h>
void display()
{
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");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
點擊後對應位置為 ( 滑鼠左0/中1/右鍵2 , 下0/上1 , x座標 , y座標 )
增加新的程式碼
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0; ///座標-1.0 ~ +1.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){
printf("%f %f\n",(x-150)/150.0, (y-150)/150.0);
teapotX= (x-150)/150.0; ///任務: x:0~300 變成 -1~+1
teapotY= -(y-150)/150.0; ///任務: y:300~0 變成 -1~+1
}
int main(int argc,char ** argv)
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
點擊後對應位置為 ( x座標 , y座標 )
且茶壺會跟著點擊目標而移動
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0;
void display()
{
glClearColor(183/255.0,203/255.5,87/255.0,1);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清背景
glBegin(GL_POLYGON);///開始畫
glColor3f(211/255.0,180/255.0,113/255.0);
glVertex2f((53-150)/150.0,-(143-150)/150.0);
glVertex2f((66-150)/150.0,-(143-150)/150.0);
glVertex2f((66-150)/150.0,-(213-150)/150.0);
glEnd();///結束畫
glutSwapBuffers();
}
void mouse(int button,int state, int x,int y){
if(state==GLUT_DOWN){
printf(" glVertex2f( (%d-150)/150.0, -(%d-150)/150.0);\n",x,y);
}
}
int main(int argc,char ** argv)
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
week03 HW




我要從今天開始每周簽到
回覆刪除Week'1
刪除