Week 03 課堂筆記
HW 1
複習Week 02的作業(GLUT的程式碼)
HW 2
1.增加Mouse事件,用滑鼠按下的位置顯示X、Y。
程式碼:
#include <stdio.h> ///為了printf()
#include <GL/glut.h>
void mouse (int button, int state, int x, int y) ///mouse事件,有四個參數
{
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("GLUT Shapes");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///test the mouse func
glutMainLoop();
}
2.利用Mouse事件,知道X、Y的位置,用X、Y的數值顯示顏色。
程式碼:
void mouse (int button, int state, int x, int y) ///mouse事件,有四個參數
{
printf("%d %d %d %d\n",button,state,x,y);
glColor3f(1,x/300.0,y/300.0);
glutPostRedisplay(); ///只打display(); 是錯誤的
}
HW 3
利用Motion事件,去做拖曳動作。顏色會隨著拖曳的位置而改變。
程式碼:
#include <math.h>
#include <stdio.h>
#include <GL/glut.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);
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("GLUT Shapes");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
*補充
找點位置。
程式碼:
void mouse (int button, int state, int x, int y)
{
if(state==GLUT_DOWN) printf("glVertex2f(%.2f %.2f);\n",(x-150)/150.0,(y-150)/150.0);
glColor3f(1,x/300.0,y/300.0);
glutPostRedisplay();
}
HW 4
用三角函數畫圓。
程式碼:
#include <math.h>
#include <GL/glut.h>
static void display(void)
{
glBegin(GL_POLYGON);
for(float angle=0;angle<3.1415926 * 2;angle+=0.01){
glVertex2f(cos(angle),sin(angle));
}
glEnd();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
}






沒有留言:
張貼留言