複習上周茶壺(增加滑鼠點擊功能)
#include <GL/glut.h> ///為了glut函式#include <stdio.h> ///為了printf函式
void display()
{
glutSolidTeapot(0.5);
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();
}
茶壺移動
#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;
teapotY= -(y-150)/150.0;
}
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>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON); ///程式產生的頂點
glVertex2f((143-150)/150.0, -(81-150)/150.0);
glVertex2f((114-150)/150.0, -(128-150)/150.0);
glVertex2f((64-150)/150.0, -(126-150)/150.0);
glVertex2f((101-150)/150.0, -(154-150)/150.0);
glVertex2f((88-150)/150.0, -(207-150)/150.0);
glVertex2f((136-150)/150.0, -(180-150)/150.0);
glVertex2f((179-150)/150.0, -(211-150)/150.0);
glVertex2f((162-150)/150.0, -(182-150)/150.0);
glVertex2f((221-150)/150.0, -(150-150)/150.0);
glVertex2f((167-150)/150.0, -(142-150)/150.0);
glVertex2f((139-150)/150.0, -(83-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>
void display()
{
glClearColor(255/255.0,255/255.0,255/255.0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3f(127/255.0, 76/255.0,27/255.0);
glVertex2f((144-150)/150.0, -(68-150)/150.0);
glVertex2f((142-150)/150.0, -(63-150)/150.0);
glVertex2f((133-150)/150.0, -(56-150)/150.0);
glVertex2f((134-150)/150.0, -(52-150)/150.0);
glVertex2f((139-150)/150.0, -(52-150)/150.0);
glVertex2f((145-150)/150.0, -(60-150)/150.0);
glVertex2f((149-150)/150.0, -(69-150)/150.0);
glVertex2f((148-150)/150.0, -(71-150)/150.0);
glEnd();
glBegin(GL_POLYGON); ///程式產生的頂點
glColor3f(185/255.0, 56/255.0, 54/255.0);
glVertex2f((111-150)/150.0, -(212-150)/150.0);
glVertex2f((102-150)/150.0, -(203-150)/150.0);
glVertex2f((91-150)/150.0, -(189-150)/150.0);
glVertex2f((83-150)/150.0, -(171-150)/150.0);
glVertex2f((79-150)/150.0, -(158-150)/150.0);
glVertex2f((77-150)/150.0, -(153-150)/150.0);
glVertex2f((74-150)/150.0, -(130-150)/150.0);
glVertex2f((77-150)/150.0, -(111-150)/150.0);
glVertex2f((88-150)/150.0, -(88-150)/150.0);
glVertex2f((104-150)/150.0, -(74-150)/150.0);
glVertex2f((120-150)/150.0, -(69-150)/150.0);
glVertex2f((167-150)/150.0, -(69-150)/150.0);
glVertex2f((190-150)/150.0, -(71-150)/150.0);
glVertex2f((201-150)/150.0, -(75-150)/150.0);
glVertex2f((217-150)/150.0, -(86-150)/150.0);
glVertex2f((226-150)/150.0, -(100-150)/150.0);
glVertex2f((232-150)/150.0, -(122-150)/150.0);
glVertex2f((232-150)/150.0, -(146-150)/150.0);
glVertex2f((227-150)/150.0, -(164-150)/150.0);
glVertex2f((220-150)/150.0, -(177-150)/150.0);
glVertex2f((211-150)/150.0, -(192-150)/150.0);
glVertex2f((198-150)/150.0, -(205-150)/150.0);
glVertex2f((187-150)/150.0, -(211-150)/150.0);
glVertex2f((170-150)/150.0, -(217-150)/150.0);
glVertex2f((111-150)/150.0, -(212-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3f(104/255.0, 124/255.0,64/255.0);
glVertex2f((159-150)/150.0, -(70-150)/150.0);
glVertex2f((167-150)/150.0, -(50-150)/150.0);
glVertex2f((173-150)/150.0, -(38-150)/150.0);
glVertex2f((183-150)/150.0, -(32-150)/150.0);
glVertex2f((200-150)/150.0, -(27-150)/150.0);
glVertex2f((216-150)/150.0, -(27-150)/150.0);
glVertex2f((231-150)/150.0, -(29-150)/150.0);
glVertex2f((241-150)/150.0, -(32-150)/150.0);
glVertex2f((234-150)/150.0, -(44-150)/150.0);
glVertex2f((225-150)/150.0, -(54-150)/150.0);
glVertex2f((211-150)/150.0, -(61-150)/150.0);
glVertex2f((202-150)/150.0, -(63-150)/150.0);
glVertex2f((184-150)/150.0, -(65-150)/150.0);
glVertex2f((171-150)/150.0, -(64-150)/150.0);
glVertex2f((159-150)/150.0, -(69-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();
}




沒有留言:
張貼留言