Lighting problem.

Тема в разделе "WASM.OpenGL", создана пользователем 9ine, 11 авг 2004.

  1. 9ine

    9ine New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    24
    Адрес:
    Russia
    Как задать правильно параметры освещения и его позицию, чтобы свет все время исходил из точки обзора?

    Задаю все параметры света в Init()

    light_position[] = {0.0, 0.0, 1.0, 0.0}

    В Draw() рисую прямоугольник в плоскости X,Y. Свет напрямую падая на его поверхность в таком положении, а прямоугольник остается едва освещен?, вращая его вокруг Y максимум света приходится когда он преодолевает угол в 45 в плоскости X,Z? Почему нет максимальной освещенности когда свет падает на него напрямую?

    glBegin(GL_QUADS);

    glNormal3f(-1.0,-1.0,0.0);

    glVertex3f(-1.0,-1.0,0.0);

    glNormal3f(1.0,-1.0,0.0);

    glVertex3f(1.0,-1.0,0.0);

    glNormal3f(1.0,1.0,0.0);

    glVertex3f(1.0,1.0,0.0);

    glNormal3f(-1.0,1.0,0.0);

    glVertex3f(-1.0,1.0,0.0);

    glEnd();
     
  2. Noble Ghost

    Noble Ghost New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    204
    Адрес:
    Russia
    а каков материал освещаемого предмета?
     
  3. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Мне кажется, что нормаль должна быть единичной длины. Для правильного освещения плоскости необходимо, чтобы нормаль была строго ей перпендикулярна. Возможно у тебя не так, проверь.
     
  4. 9ine

    9ine New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    24
    Адрес:
    Russia
    GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };

    GLfloat mat_shininess[] = { 80.0f };

    GLfloat mat_ambient[] = {0.0f, 0.1f, 0.1f, 1.0f};

    GLfloat mat_diffuse[] = {0.0f, 0.5f, 0.5f, 1.0f};



    GLfloat light_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };

    GLfloat light_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };

    GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };

    GLfloat light_position[] = { 0.0, 0.0, 1.0, 0.0 };



    glEnable(GL_NORMALIZE);



    Как сделать нормаль перпендикулярно поверхности?

    В какую сторону получаются нормали, походу в разные стороны а не перпендикулярно. Когда начинаешь вращать полигон его максимум освещенности приходится на ребро которое к тебе поворачивается т.е. нормали выглядят так



    | | - нормали

    XXXXXX

    X X - полигон

    X X

    XXXXXX

    | | - нормали



    Полигон в плоскости X,Z а нормали не паралельно оси Y и перпендикулярно X,Z а почемуто получаются тоже в плоскости X,Z?



    Интересно что выводя auxSolidCube() освещение нормальное максимум когда поверхности к тебе лицом?

    В какую сторону получается нормаль после вычисления glNormal() перед glVertex().
     
  5. Dronas

    Dronas New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2006
    Сообщения:
    4
    glNormal() не вычисляет нормаль.

    прошу прощения, на дату внимания не обратил :)