Показать сообщение отдельно
Старый 08.09.2009, 22:22   #4
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: 2d в OpenGL. вывод тени от спрайта

получилось вот таким образом, но тени смешиваются,как это исправить?
    // Значение, которым будет заполняться буфер стенсила при его очистке
    glClearStencil(0);//значение фона буфера стенсила фона
    glStencilMask(0xFF);//Определяем, какие биты могут писаться в стенсил буфер
    glClear( GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);// Очищаем все буферы

    //Задний фон
    glColor4f(1,1,1,1);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,background_texture);
    DrawTXT(win_DX/2,win_DY/2,win_DX,win_DY,0,1);

      level_draw();
      enemy_ground_draw();//рисование и анимация наземных врагов
      starwind_draw();

      glEnable(GL_STENCIL_TEST);//включаем трафарет
      //определяем область где тень рисуется
      glStencilFunc(GL_NEVER, 1, 0);
      //в том месте где рисуется трафарет значение буфера заменяем на 1
      glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
      level_draw();//уровень является трафаретом-только на нем видна тень
      // тень будет рисоваться только в тех местах,где значение в буфере 1
      glStencilFunc(GL_EQUAL, 1, 255);
      player_shadow_draw();
      enemy_air_shadow_draw();
      glDisable(GL_STENCIL_TEST);//отключаем трафарет

      enemy_air_draw();//рисование и анимация летающих врагов
      enemy_blast_draw();//рисуем патрон врага

      player_draw();//Рисуем корабль игрока
      player_ammo_draw();//Рисуем патрон игрока

      effect_draw();
(Offline)
 
Ответить с цитированием