2018年3月16日 星期五

week03_黃惠嘉

*點線面顏色、移動/旋轉/縮放與矩陣(Matrix)
*鍵盤、滑鼠

1.複習上禮拜教的點線面顏色



2.互評HW2 上傳5張自己覺得很好的作業

3.
#include <GL/glut.h>///GLUT外掛
#include <stdio.h>
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面

    glutSolidTeapot(0.3);///畫茶壺
    glutSwapBuffers();
}
int main(int argc, char *argv[])///主要函式
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("05160080");

    glutDisplayFunc(display);
    ///  glutMouseFunc(mouse);///mouse滑鼠事件
    /// glutMouseFunc(motion);///mouse滑鼠的motion事件

    glutMainLoop();

    return EXIT_SUCCESS;
}


4.講解mouse事件

void mouse(int button,int state,int x,int y)
{
    printf("%d %d %d %d\n",button, state, x,y);
    ///button左中右鍵 state按下去/彈起來 xy mouse滑鼠位置
}
int main裡加glutMouseFunc(mouse);///mouse滑鼠事件


5.用滑鼠去按茶壺的位置
void mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN)
        printf("  glVertex2f(%f, %f);\n",(x-150)/150.0,(150-y)/150.0);
    ///button左中右鍵 state按下去/彈起來 xy mouse滑鼠位置

}


之後複製printf出來的glVertex2f

      glVertex2f(0.200000, -0.253333);
      glVertex2f(0.246667, -0.193333);
      glVertex2f(0.273333, -0.133333);
      glVertex2f(0.353333, -0.113333);
      glVertex2f(0.380000, -0.046667);
      glVertex2f(0.393333, 0.060000);
      glVertex2f(0.480000, 0.126667);
      glVertex2f(0.520000, 0.140000);
      glVertex2f(0.420000, 0.140000);
      glVertex2f(0.360000, 0.066667);
      glVertex2f(0.340000, 0.020000);
      glVertex2f(0.280000, -0.020000);
      glVertex2f(0.220000, 0.133333);
      glVertex2f(0.120000, 0.140000);
      glVertex2f(0.046667, 0.146667);
      glVertex2f(0.026667, 0.206667);
      glVertex2f(0.053333, 0.246667);
      glVertex2f(-0.066667, 0.246667);
      glVertex2f(-0.040000, 0.200000);
      glVertex2f(-0.180000, 0.153333);
      glVertex2f(-0.233333, 0.126667);
      glVertex2f(-0.246667, 0.100000);

把glutSolidTeapot(0.3);///畫茶壺 刪掉
前後加上下面程式
glBegin(GL_LINES);

glEnd();



6.讓茶壺跟著滑鼠移動

宣告兩個變數float teapotX=0,teapotY=0;
static void display(void)
{
    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)
{

}
void motion(int x,int y)
{
    teapotX=((x-150)/150.0);
    teapotY=((150-y)/150.0);
    glutPostRedisplay();
}
int main(int argc, char *argv[])///主要函式
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("05160080");

    glutDisplayFunc(display);
    glutMouseFunc(mouse);///mouse滑鼠事件
    glutMotionFunc(motion);///mouse滑鼠的motion事件

    glutMainLoop();

    return EXIT_SUCCESS;
}





沒有留言:

張貼留言