2017年10月19日 星期四

羅宣的學習筆記_WEEK06


Lighting 打光


GLfloat pos[] = { 0.0, 0.0, -1.0, 0.0 };       [設定打光的位置]

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05");

    glutDisplayFunc(display);
    glEnable(GL_LIGHT0);      [設定開始打光]
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_DEPTH_TEST);     [設定深度測試]


    glutMainLoop();
}



















void keyboard(unsigned char key ,int x, int y)     [unsigned=>沒有負號] 
{
    printf("now: %c (%d,%d)\n",key,x,y);
}

void mouse(int button ,int stste,int x,int y){ }

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05");

    glutDisplayFunc(display);

    glutMouseFunc(mouse); 
    glutKeyboardFunc(keyboard);

    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_DEPTH_TEST);


    glutMainLoop();
}














使用鍵盤旋轉

void keyboard(unsigned char key ,int x, int y)
{
    printf("now: %c (%d,%d)\n",key,x,y);
    if(key=='1')rotateX ++;     [X軸旋轉] 
    else if (key=='2')rotateY ++;     [Y軸旋轉] 
    else if (key=='3')rotateZ ++;     [Z軸旋轉] 
    glutPostRedisplay();     [馬上更新畫面] 
}


void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();     [開始畫] 
        glRotatef(rotateX, 1,0,0);     [X軸旋轉] 
        glRotatef(rotateY, 0,1,0);     [Y軸旋轉] 
        glRotatef(rotateZ, 0,0,1);     [Z軸旋轉] 
        drawmodel();
    glPopMatrix();     [結束畫] 
    glutSwapBuffers();
}
















使用滑鼠旋轉

void mouse(int button ,int state,int x,int y)
{
    printf("button: %d state: %d (%d,%d)\n",button,state,x,y);
    if(state==GLUT_DOWN)    [滑鼠按下去開始記錄] 
    {
        oldX=x;    [滑鼠位置記成oldX.oldY] 
        oldY=y;
    }
}

void motion(int x,int y) 
{
    rotateY += -(x-oldX);    [對Y軸旋轉"X位移量"] 
    rotateX += -(y-oldY);    [對X軸旋轉"Y位移量"] 
    oldX=x;    [更新oldX] 
    oldY=y;    [更新oldY] 
    glutPostRedisplay();     [馬上更新畫面] 
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05");

    glutDisplayFunc(display);
    glutMotionFunc(motion);     [使用滑鼠旋轉] 
    glutMouseFunc(mouse);
    glutKeyboardFunc(keyboard);

    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glEnable(GL_DEPTH_TEST);

    glutMainLoop();
}
















沒有留言:

張貼留言