2017年10月23日 星期一

俊隆ㄉ計算機圖學筆記 - Week 6 Lighting

- 開啟光源
glEnable(GL_DEPTH_TEST); // 3D深度測試開啟
glEnable(GL_LIGHTING); //根據當前光源計算顏色
glEnable(GL_LIGHT0); //開啟光源i
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glDisable(GL_LIGHTING); //關閉光源
glLightfv()的用法可參考:http://blog.csdn.net/chy19911123/article/details/46413121

- 繼 week 4的 Project setting,
加入
GLfloat pos[] = {0.0, 0.0, -1.0, 0.0}; //Light position
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week05");
    //light
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    //light end
    glutDisplayFunc(display);
    glutMainLoop();
}

- Add Mouse and Keyboard control.
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);

- 實作鍵盤滑鼠旋轉角度
int rotateX = 0, rotateY = 0, rotateZ = 0;
int oldX = 0, oldY = 0;
void keyboard(unsigned char key, int x, int y)
{
    if(key == '1') rotateX+=1;
    if(key == '2') rotateY+=1;
    if(key == '3') rotateZ+=1;
    glutPostRedisplay();
}
void motion(int x, int y)
{
    rotateY += -(x- oldX);
    rotateX += -(y- oldY);
    glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
    if(state == GLUT_DOWN)
    {
        oldX = x;
        oldY = y;
    }
}






















沒有留言:

張貼留言