我用OPENGL设计好了一个旋转的立方体,请教高手们怎么样给它加上光照,使得在旋转的时候可以看到光敏感变化的效果。
    
    我认为难点在于旋转物时立方体,而不是球,而且在大多数的例子中也没有相关的说明。现在我急需此例子再做下一步的工作,那位高手能帮我一下,不胜感激!

解决方案 »

  1.   

    具体可以参考:
    void COpenGLView::SetupLighting ()
    {
    //Material Properties
    GLfloat matSpecular[] = { 1.0f, 0.0f, 0.0f, 1.0f};
    GLfloat matShininess[] = { 50.0f};
    GLfloat matAmbient[] = { 0.25f, 0.25f, 0.25f, 1.0f};
    GLfloat matDiffuse[] = { 0.5f, 0.5f, 0.5f, 1.0f}; glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular);
    glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiffuse);
    glMaterialfv(GL_FRONT, GL_AMBIENT, matAmbient);

    //Lighting Parameters

    //Enable Lighting
    glEnable(GL_LIGHTING); //Specify a single directional light
    GLfloat ambient1[] = { 0.5f,0.5f,0.5f};
    GLfloat diffuse1[] = { 0.5f,0.5f,0.5f};
    GLfloat specular1[] = { 1.0f,0.0f,0.0f};
    GLfloat position1[] = { 0.0f,0.0f,5.0f,0.0}; glLightfv(GL_LIGHT0, GL_AMBIENT, ambient1);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse1);
    glLightfv(GL_LIGHT0, GL_SPECULAR, specular1);
    glLightfv(GL_LIGHT0, GL_POSITION, position1);

    glEnable(GL_LIGHT0); //Specify a single positional spotlight
    GLfloat ambient2[] = { 1.0f,1.0f,0.0f};
    GLfloat diffuse2[] = { 1.0f,0.0f,0.0f};
    GLfloat position2[] = { 1.0f,0.0f,5.0f,1.0};
    GLfloat direction2[] = {0.0f,0.0f,-5.0f}; glLightfv(GL_LIGHT1, GL_AMBIENT, ambient2);
    glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse2);
    glLightfv(GL_LIGHT1, GL_POSITION, position2);
    glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, direction2);
    glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 15.0f);

    glEnable(GL_LIGHT1);}
    将上面的代码放在InitializeOpenGL()中,假如你采用的是控制台程序,那就是改写一下上面的代码,并将代码放在Init()中实现就可以了~~~