遇到个问题:当我放大图形的时候,真个图形都变暗了,缩小的时候又会变亮
这是不是因为光源的位置问题?
具体程序:
  
        GLfloat  Light_ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat  Light_diffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f };
GLfloat  light_Pos[] = { 500.f, 500.0f, 1000.0f, 1.0f }; glEnable(GL_DEPTH_TEST); // Hidden surface removal
glFrontFace(GL_CCW); // Counter clock-wise polygons face out
glEnable(GL_CULL_FACE); // Do not calculate inside of jet
glShadeModel(GL_SMOOTH);

glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0,GL_AMBIENT,Light_ambient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,Light_diffuse);
glLightfv(GL_LIGHT0,GL_POSITION,light_Pos);
glEnable(GL_LIGHT0);
.
.
.
.
.
        glScaled(m_scaling, m_scaling, m_scaling);
        绘图怎样让光源随着视点运动?

解决方案 »

  1.   

    glTranslate,glRoate,和glScale函数对光源同样做了变换因此,你要向对他们不起作用,那么就要在使用光源前用单位矩阵光源和视点一起运动也一样,对光源时间一个变换矩阵就是了
      

  2.   

    使用光源前用单位矩阵?glScaled(m_scaling, m_scaling, m_scaling);glPushMatrix();
    glLoadIdentity();
    GLfloat  Light_ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f };
    GLfloat  Light_diffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f }; // Setup and enable light 0
    glLightfv(GL_LIGHT0,GL_AMBIENT,Light_ambient);
    glLightfv(GL_LIGHT0,GL_DIFFUSE,Light_diffuse);
    GLfloat  light_Pos[] = { 50.f, 50.0f, 100.0f, 1.0f };
    glLightfv(GL_LIGHT0,GL_POSITION,light_Pos);

    glEnable(GL_LIGHT0);
    glPopMatrix();
    绘图
    发现结果还是一样啊,放大缩小仍然会变暗变亮
    :(
    还是没有完全理解
      

  3.   


       //将光源设置为平行光  试一下
       GLfloat light_Pos[] = { 1.0f, 1.0f, 1.0f, 0.0f };
      

  4.   

    我也初学,有兴趣交流下.Q187188526.
    glLoadIdentity好像应该放在glPushMatrix外面.