Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2016, 18:53   #1
bosyak
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 29
По умолчанию Тень Трафарет OpenGL delphi

Здравствуйте, не могли бы вы помочь мне с реализацией тени. Принцип работы я понял, сначала рисуется "основная" сцена, потом обработанная буфером трафарета, только не могу никак интегрировать, пробовал пример из книги Краснова, однако у меня получается билиберда.
Код:
procedure TGraphViev.OnPaint(var msg: TWMPaint);
begin
  if CanDraw = true then
  begin

    if Disp_par.FillMode then
      glPolygonMode(GL_FRONT_AND_BACK, gl_fill)
    else
      glPolygonMode(GL_FRONT_AND_BACK, gl_line);

    if Disp_par.Light then begin
      glenable(GL_LIGHT1);
      glenable(gl_lighting);
    end
    else begin
      gldisable(GL_LIGHT1);
      glDisable(gl_lighting);
    end;

    glClearColor(background.Red, background.Green, background.Blue, 1);
    glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

    glViewport(0, 0, Self.Width, Self.Height);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity;

    gluPerspective(45.0, Self.Width / Self.Height, 0.1, 200);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity;

    glTranslatef(Disp_par.Translate_x, Disp_par.Translate_y,
      Disp_par.Translate_z);

    glRotatef(AngleX, 1, 0, 0);
    glRotatef(AngleY, 0, 1, 0);
    glRotatef(AngleZ, 0, 0, 1);
    glPushMatrix;
    DrawGraphic;
    glPopMatrix;
   glClear(GL_STENCIL_BUFFER_BIT);
   glEnable(GL_STENCIL_TEST);
   glPushMatrix;
   glColor4f(0, 0, 0, 0.3);
   glDisable(GL_DEPTH_TEST);
   DrawGraphic;
   glEnable(GL_DEPTH_TEST);
   glDisable(GL_STENCIL_TEST);

    if Length(Graphic_Array) > 0 then

      DrawCube;

    glPopMatrix;
    SwapBuffers(FDC);
  end;
end;
Настройка выглядит так:
Код:
procedure TGraphViev.SetupRC;
begin
  glClearColor(background.Red, background.Green, background.Blue, 1);
  glenable(GL_DEPTH_TEST);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glClearStencil(0);
  glStencilOp(GL_INCR, GL_INCR, GL_INCR);
  glStencilFunc(GL_EQUAL, 0, $FFFFFFF);
  glenable(GL_COLOR_MATERIAL);

end;
Изображения
Тип файла: jpg Безымянный.jpg (28.3 Кб, 134 просмотров)
bosyak вне форума Ответить с цитированием
Старый 17.01.2016, 20:33   #2
bosyak
Пользователь
 
Регистрация: 12.11.2013
Сообщений: 29
По умолчанию

Спасибо уже сам разобрался, ошибка была в процедуре DrawGraphic, вот результат)))
Изображения
Тип файла: jpg Безымянный.jpg (26.5 Кб, 126 просмотров)
bosyak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# тень от текста в TextBox Cpluser C# (си шарп) 1 16.09.2013 22:46
Тень вокруг panel ViniPux1112 Мультимедиа в Delphi 2 27.11.2012 22:37
ie+тень+border-radius Catsys HTML и CSS 0 15.07.2012 22:17
Lazarus таинственная тень Delphi reihtmonbern О форуме и сайтах клуба 18 14.03.2011 10:21
Тень клоуна Роман Радер Свободное общение 0 24.11.2008 01:03