複習Week03的茶壺(http://2017graphics.blogspot.tw/2017/03/week02.html)
#include <GL/glut.h>
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
///glutMouseFunc(mouse);
///glutMotionFunc(motion);
glutMainLoop();
}
主題 : Mouse互動
1.寫滑鼠的函式,讓程式可以印出滑鼠的座標 0為點下去時的位置,1為放開時的位置
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
///glutMotionFunc(motion);
glutMainLoop();
}

2.改變茶壺的顏色,藉由滑鼠點擊來變更滑鼠的顏色
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
glColor3f(1,x/300.0,y/300.0); ///1紅色、x/300.0綠色、y/300.0藍色,改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
///glutMotionFunc(motion);
glutMainLoop();
}

3.滑鼠可以拖曳
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}

4.在拖曳時茶壺顏色可以變,所以glColor要從mouse移到motion那一段程式裡
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}


5.劃出一個圓
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON); ///實心
///glBegin(GL_LINE_LOOP); ///線
for(float angle=0;angle<3.14159*2;angle+=0.001)
{
glVertex2f(0.5*cos(angle),sin(angle));
}
glEnd();
//glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}

#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
///glBegin(GL_POLYGON); ///實心
glBegin(GL_LINE_LOOP); ///線
for(float angle=0;angle<3.14159*2;angle+=0.001)
{
glVertex2f(0.5*cos(angle),sin(angle));
}
glEnd();
//glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}

#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
///glBegin(GL_POLYGON); ///實心
glBegin(GL_LINE_LOOP); ///線
for(float angle=0;angle<3.14159*2;angle+=0.001)
{
glVertex2f(0.5*cos(angle),sin(angle));
}
glEnd();
//glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}

#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
///glutMotionFunc(motion);
glutMainLoop();
}

2.改變茶壺的顏色,藉由滑鼠點擊來變更滑鼠的顏色
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
glColor3f(1,x/300.0,y/300.0); ///1紅色、x/300.0綠色、y/300.0藍色,改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
///glutMotionFunc(motion);
glutMainLoop();
}

3.滑鼠可以拖曳
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}

4.在拖曳時茶壺顏色可以變,所以glColor要從mouse移到motion那一段程式裡
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}


5.劃出一個圓
#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON); ///實心
///glBegin(GL_LINE_LOOP); ///線
for(float angle=0;angle<3.14159*2;angle+=0.001)
{
glVertex2f(0.5*cos(angle),sin(angle));
}
glEnd();
//glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}

#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
///glBegin(GL_POLYGON); ///實心
glBegin(GL_LINE_LOOP); ///線
for(float angle=0;angle<3.14159*2;angle+=0.001)
{
glVertex2f(0.5*cos(angle),sin(angle));
}
glEnd();
//glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}

#include <GL/glut.h>
#include <stdio.h> ///printf()
#include <math.h>
void mouse(int button,int state,int x,int y) ///滑鼠的函式
{
printf("%d %d %d %d\n",button ,state ,x ,y );
}
void motion(int x, int y)
{
printf("%d %d\n",x,y);
glColor3f(1,x/300.0,y/300.0); ///1紅色為假設(可變更)、x/300.0綠色、y/300.0藍色(除以300是因為視窗大小300*300),改變茶壺顏色
glutPostRedisplay();
}
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
///glBegin(GL_POLYGON); ///實心
glBegin(GL_LINE_LOOP); ///線
for(float angle=0;angle<3.14159*2;angle+=0.001)
{
glVertex2f(0.5*cos(angle),sin(angle));
}
glEnd();
//glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160116 fish");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse function
glutMotionFunc(motion); ///拖曳
glutMainLoop();
}


沒有留言:
張貼留言