2017年3月13日 星期一

Week 03 20170313 鄭雅至的課堂筆記

Week 03 課堂筆記

HW 1

複習Week 02的作業(GLUT的程式碼)













HW 2

1.增加Mouse事件,用滑鼠按下的位置顯示X、Y。













程式碼:

#include <math.h>
#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();

}





沒有留言:

張貼留言