openGL 在光源处画一个球,移动光源

下面只谈在光源处画球与移动光源的方法,不贴全部代码,所有具体代码以及教程见我的 github : https://github.com/David-Guo/OpenGLTrain/tree/master/hw3%28Buffer%29

在光源处画球

// postion[3] 为光源所在坐标
glPushMatrix(); 
glDisable(GL_LIGHTING);
glTranslatef(position[0], position[1], position[2]);//移动绘图原点到光源处
glColor3f (1.0f, 1.0f, 0.0f);           //设置球的颜色为黄色
glutSolidSphere(0.5f, 50.0f, 50.0f);    //绘制球

glEnable(GL_LIGHTING);
// 下面四行用来设置 0 号光源的 position diffuse specular ambient
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);

通过按动键盘时间触发移动光源,下面的代码可以实现移动光源:

void keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
    case 'h':
        light_position[0] -= 5;
        break;
    case 'j':
        light_position[0] += 5;
        break;
    case 'k':
        light_position[2] -= 5;
        break;
    case 'l':
        light_position[2] += 5;
        break;
    case 27:     exit(0);
    }
    glutPostRedisplay();
}

light_postition[0] 表示光源在世界坐标系中的 x 坐标,light_postition[1] 则表示光源在世界坐标系中的 z 坐标。

下面是移动光源的效果图:

  • 移动前:

openGL 在光源处画一个球,移动光源_第1张图片

  • 移动后:

openGL 在光源处画一个球,移动光源_第2张图片

可以看到连阴影也跟着一起移动了。

openGL 在光源处画一个球,移动光源_第3张图片

openGL 在光源处画一个球,移动光源_第4张图片

你可能感兴趣的:(11,OpenGL)