Народный учебник по OpenGL


Урок 26. Реалистичное отражение с использование буфера шаблона и отсечения. - часть 7


  glDisable(GL_TEXTURE_GEN_S);      // Запретить сферическое наложение

  glDisable(GL_TEXTURE_GEN_T);      // Запретить сферическое наложение

  glDisable(GL_BLEND);              // Запретить смешивание

}

 

Следующая функция рисует пол, над которым парит наш мяч. Мы выбираем текстуру пола (EnvWall), и рисуем один текстурированный прямоугольник, расположенный вдоль оси Z.

 

void DrawFloor()    // Рисование пола

{

  glBindTexture(GL_TEXTURE_2D, texture[0]);// текстура 1 (0)

  glBegin(GL_QUADS);           // Начало рисования

    glNormal3f(0.0, 1.0, 0.0); // «Верхняя» нормаль

    glTexCoord2f(0.0f, 1.0f);  // Нижняя левая сторона текстуры

    glVertex3f(-2.0, 0.0, 2.0);//Нижний левый угол пола

 

    glTexCoord2f(0.0f, 0.0f);  //Верхняя левая сторона текстуры

    glVertex3f(-2.0, 0.0,-2.0);//Верхний левый угол пола

     

    glTexCoord2f(1.0f, 0.0f);  //Верхняя правая сторона текстуры

    glVertex3f( 2.0, 0.0,-2.0);//Верхний правый угол пола

     

    glTexCoord2f(1.0f, 1.0f);  //Нижняя правая сторона текстуры

    glVertex3f( 2.0, 0.0, 2.0);//Нижний правый угол пола

  glEnd();                     // конец рисования

}

Теперь одна забавная вещь. Здесь мы скомбинируем все наши объекты и изображения для создания сцены с отражениями.

 

Начинаем мы с того, что очищаем экран (GL_COLOR_BUFFER_BIT) синим цветом (задан ранее в программе). Также очищаются буфер глубины (GL_DEPTH_BUFFER_BIT) и буфер шаблона (GL_STENCIL_BUFFER_BIT). Убедитесь в том, что вы включили команду очистки буфера шаблона, так как это новая команда для вас и ее легко пропустить. Важно отметить, что при очистке буфера шаблона мы заполняем его нулевыми значениями.

 

После очистки экрана и буферов мы определяем наше уравнение для плоскости отсечения. Плоскость отсечения нужна для отсечения отражаемого изображения.

 

Выражение eqr[]={0.0f,-1.0f, 0.0f, 0.0f} будет использовано, когда мы будем рисовать отраженное изображение. Как вы можете видеть, Y-компонента имеет отрицательное значение. Это значит, что мы увидим пиксели рисунка, если они появятся ниже пола, то есть с отрицательным значением по Y-оси. Любой другой графический вывод выше пола не будет отображаться, пока действует это уравнение.




- Начало -  - Назад -  - Вперед -



Книжный магазин