游標點的茶壺位置座標會顯示出來
沿用上周的茶壺
加入TODO
加入藍色程式碼
#include <GL/glut.h>
#include <stdio.h>///TODO:為了 printf ()
void display()
{
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
void mouse (int button, int state, int x, int y)///TODO:
{///mouse函式:左0中1右2 ,下:0/上1,x座標,y座標
printf("%d %d %d %d\n", button,state,x,y);///TODO:測試給你看{值}
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);///TODO:mouse 的函式
glutMainLoop();
}
茶壺 會跟著滑鼠游標的位置移動
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;///TODO2:這裡式-1.0~+1.0的座標
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///TODO2:清背景
glPushMatrix();///TODO2:備份矩陣
glTranslatef(teapotX, teapotY, 0);///TODO2:移動
glutSolidTeapot( 0.3 );
glPopMatrix();///TODO2:備份矩陣
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;///TODO2:任務:x:0...300 變成-1...+1
teapotY= -(y-150)/150.0;///TODO2:任務: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();
}
點座標畫圖
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f((55-150)/150.0,-(104-150)/150.0);
glVertex2f((112-150)/150.0,-(77-150)/150.0);
glVertex2f((168-150)/150.0,-(75-150)/150.0);
glVertex2f((224-150)/150.0,-(101-150)/150.0);
glVertex2f((245-150)/150.0,-(169-150)/150.0);
glVertex2f((219-150)/150.0,-(223-150)/150.0);
glVertex2f((156-150)/150.0,-(236-150)/150.0);
glVertex2f((100-150)/150.0,-(220-150)/150.0);
glVertex2f((62-150)/150.0,-(179-150)/150.0);
glVertex2f((60-150)/150.0,-(140-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();
}
-------------------------------------------------------------------------------------------------------------------------
回家作業
長長的程式碼
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3f(0,0,0); glVertex2f(-1,+1);//左上
glColor3f(0,1,0); glVertex2f(1,1);//右上
glColor3f(0,0,1); glVertex2f(+1,-1);//右下
glColor3f(1,0,0); glVertex2f(-1,-1);//左下
glEnd();
glBegin(GL_POLYGON);//四個邊
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((61-150)/150.0, - (25-150)/150.0);//top
glVertex2f((233-150)/150.0, - (25-150)/150.0);//top
glVertex2f((228-150)/150.0, - (38-150)/150.0);
glVertex2f((241-150)/150.0, - (24-150)/150.0);
glVertex2f((245-150)/150.0, - (25-150)/150.0);
glVertex2f((249-150)/150.0, - (27-150)/150.0);
glVertex2f((254-150)/150.0, - (29-150)/150.0);
glVertex2f((259-150)/150.0, - (35-150)/150.0);
glVertex2f((262-150)/150.0, - (38-150)/150.0);
glVertex2f((267-150)/150.0, - (43-150)/150.0);
glVertex2f((271-150)/150.0, - (50-150)/150.0);
glVertex2f((272-150)/150.0, - (55-150)/150.0);
glVertex2f((275-150)/150.0, - (65-150)/150.0);//right
glVertex2f((275-150)/150.0, - (235-150)/150.0);//right
glVertex2f((273-150)/150.0, - (224-150)/150.0);
glVertex2f((274-150)/150.0, - (236-150)/150.0);
glVertex2f((273-150)/150.0, - (243-150)/150.0);
glVertex2f((271-150)/150.0, - (249-150)/150.0);
glVertex2f((266-150)/150.0, - (258-150)/150.0);
glVertex2f((260-150)/150.0, - (263-150)/150.0);
glVertex2f((254-150)/150.0, - (270-150)/150.0);
glVertex2f((251-150)/150.0, - (271-150)/150.0);
glVertex2f((248-150)/150.0, - (272-150)/150.0);
glVertex2f((244-150)/150.0, - (273-150)/150.0);
glVertex2f((236-150)/150.0, - (276-150)/150.0);//button
glVertex2f((62-150)/150.0, - (276-150)/150.0);//button
glVertex2f((55-150)/150.0, - (273-150)/150.0);
glVertex2f((48-150)/150.0, - (270-150)/150.0);
glVertex2f((47-150)/150.0, - (268-150)/150.0);
glVertex2f((44-150)/150.0, - (268-150)/150.0);
glVertex2f((41-150)/150.0, - (266-150)/150.0);
glVertex2f((31-150)/150.0, - (255-150)/150.0);
glVertex2f((30-150)/150.0, - (253-150)/150.0);
glVertex2f((29-150)/150.0, - (250-150)/150.0);
glVertex2f((28-150)/150.0, - (251-150)/150.0);
glVertex2f((26-150)/150.0, - (246-150)/150.0);
glVertex2f((23-150)/150.0, - (237-150)/150.0);//left
glVertex2f((23-150)/150.0, - (62-150)/150.0);//left
glVertex2f((26-150)/150.0, - (53-150)/150.0);
glVertex2f((27-150)/150.0, - (52-150)/150.0);
glVertex2f((28-150)/150.0, - (49-150)/150.0);
glVertex2f((31-150)/150.0, - (44-150)/150.0);
glVertex2f((34-150)/150.0, - (39-150)/150.0);
glVertex2f((39-150)/150.0, - (36-150)/150.0);
glVertex2f((45-150)/150.0, - (30-150)/150.0);
glVertex2f((45-150)/150.0, - (32-150)/150.0);
glVertex2f((46-150)/150.0, - (30-150)/150.0);
glVertex2f((53-150)/150.0, - (27-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3f(255.0,255.0,255.0);
for(float angle=0 ; angle<=3.1415926 * 2 ;angle+=0.001)
{
glVertex2f( 0.59*cos(angle) ,0.47*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);//下
glColor3f(255.0,255.0,255.0);
glVertex2f((140-150)/150.0, - (240-150)/150.0);//下頂點
glVertex2f((143-150)/150.0, - (239-150)/150.0);
glVertex2f((159-150)/150.0, - (231-150)/150.0);
glVertex2f((163-150)/150.0, - (229-150)/150.0);
glVertex2f((170-150)/150.0, - (225-150)/150.0);
glVertex2f((179-150)/150.0, - (219-150)/150.0);//
glVertex2f((183-150)/150.0, - (217-150)/150.0);
glVertex2f((188-150)/150.0, - (214-150)/150.0);
glVertex2f((197-150)/150.0, - (208-150)/150.0);
glVertex2f((200-150)/150.0, - (200-150)/150.0);
glVertex2f((210-150)/150.0, - (194-150)/150.0);//右
glVertex2f((144-150)/150.0, - (219-150)/150.0);//左
glEnd();
glBegin(GL_POLYGON);//L
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((90-150)/150.0, - (129-150)/150.0);
glVertex2f((100-150)/150.0, - (129-150)/150.0);
glVertex2f((100-150)/150.0, - (169-150)/150.0);
glVertex2f((90-150)/150.0, - (169-150)/150.0);//L
glEnd();
glBegin(GL_POLYGON);//L
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((90-150)/150.0, - (169-150)/150.0);
glVertex2f((90-150)/150.0, - (159-150)/150.0);
glVertex2f((117-150)/150.0, - (159-150)/150.0);
glVertex2f((117-150)/150.0, - (169-150)/150.0);//L
glEnd();
glBegin(GL_POLYGON);//I
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((124-150)/150.0, - (129-150)/150.0);
glVertex2f((134-150)/150.0, - (129-150)/150.0);
glVertex2f((134-150)/150.0, - (169-150)/150.0);
glVertex2f((124-150)/150.0, - (169-150)/150.0);//I
glEnd();
glBegin(GL_POLYGON);//N
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((141-150)/150.0, - (129-150)/150.0);
glVertex2f((151-150)/150.0, - (129-150)/150.0);
glVertex2f((151-150)/150.0, - (169-150)/150.0);
glVertex2f((141-150)/150.0, - (169-150)/150.0);//N
glEnd();
glBegin(GL_POLYGON);//N斜
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((151-150)/150.0, - (129-150)/150.0);
glVertex2f((169-150)/150.0, - (154-150)/150.0);
glVertex2f((169-150)/150.0, - (169-150)/150.0);
glVertex2f((151-150)/150.0, - (144-150)/150.0);//N
glEnd();
glBegin(GL_POLYGON);//N
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((169-150)/150.0, - (129-150)/150.0);
glVertex2f((179-150)/150.0, - (129-150)/150.0);
glVertex2f((179-150)/150.0, - (169-150)/150.0);
glVertex2f((169-150)/150.0, - (169-150)/150.0);//N
glEnd();
glBegin(GL_POLYGON);//E
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((186-150)/150.0, - (129-150)/150.0);
glVertex2f((196-150)/150.0, - (129-150)/150.0);
glVertex2f((196-150)/150.0, - (169-150)/150.0);
glVertex2f((186-150)/150.0, - (169-150)/150.0);//E
glEnd();
glBegin(GL_POLYGON);//E
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((186-150)/150.0, - (129-150)/150.0);
glVertex2f((214-150)/150.0, - (129-150)/150.0);
glVertex2f((214-150)/150.0, - (138-150)/150.0);
glVertex2f((186-150)/150.0, - (138-150)/150.0);//E
glEnd();
glBegin(GL_POLYGON);//E
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((186-150)/150.0, - (144-150)/150.0);
glVertex2f((214-150)/150.0, - (144-150)/150.0);
glVertex2f((214-150)/150.0, - (153-150)/150.0);
glVertex2f((186-150)/150.0, - (153-150)/150.0);//E
glEnd();
glBegin(GL_POLYGON);//E
glColor3f(30/255.0,175/255.0,22/255.0);
glVertex2f((186-150)/150.0, - (160-150)/150.0);
glVertex2f((214-150)/150.0, - (160-150)/150.0);
glVertex2f((214-150)/150.0, - (169-150)/150.0);
glVertex2f((186-150)/150.0, - (169-150)/150.0);//E
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();
}-------------------------------------------------------------------------------------------------------------------------
圓
for(float angle=0 ; angle<=3.1415926 * 2 ;angle+=0.01)
{
glVertex2f(0.17*cos(angle)-0.3,0.17*sin(angle));
}
-------------------------------------------------------------------------------------------------------------------------
顏色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glClearColor(206/255.0,123/255.0,93/255.0,1);
glEnd();
glutSwapBuffers();
------------------------------------------------------------------------------------------------------------------------
顏色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glClearColor(206/255.0,123/255.0,93/255.0,1);
glEnd();
glutSwapBuffers();
------------------------------------------------------------------------------------------------------------------------
#include <GL/glut.h>
#include <stdio.h>
#include <math.h>
void display()
{
glClearColor(255,255,255,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3f(0.0,0.0,0.0);
glVertex2f((280-150)/150.0, - (20-150)/150.0);
glVertex2f((280-150)/150.0, - (280-150)/150.0);
glVertex2f((20-150)/150.0, - (280-150)/150.0);
glVertex2f((20-150)/150.0, - (20-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();
}





沒有留言:
張貼留言