Конференция "Игры" » OpenGL, blend [Delphi, Windows]
 
  • main © (12.10.09 13:23) [20]

    > Большой кайлём.


    Не слушай его! А то он тебя научит, да!!  )))
  • @!!ex © (12.10.09 13:25) [21]
    > main ©

    Разжевываю:
    При ЛЮБОЙ сортировке Depth Test идет первым.
    Тоесть если тест глубины НЕ сработал, то пиксель не рисуется.
    Теперь имеем два квада звезд.
    Первая находится ближе к камере и частично перекрывает вторую.
    Первая нарисовалась, часть второй НЕ ПРОЙДЕТ тест глубины, адже там, где у первой звезды пиксели прозрачны.
    Тоесть часть второй звезды ВООБЩЕ НЕ НАРИСУЕТСЯ, ПРИ ЛЮБОМ СМЕШИВАНИИ.
  • main © (12.10.09 13:27) [22]

    > @!!ex ©   (12.10.09 13:25) [21]


    Вопрос:
    Ты ссылку что я привел, читал?
  • @!!ex © (12.10.09 13:28) [23]
    > [22] main ©   (12.10.09 13:27)

    Читал.
    Ключевой момент статьи:
    при отрисовке прозрачных объектов, выключать для них запись в буффер глубины, но оставлять включенным тест на глубину (Z-test).



    О чем я тебе и талдычу уже 4 поста. Внимательно прочитай нашу с тобой переписку.
  • main © (12.10.09 13:33) [24]
    Разжевываю:

    - сначала рисуем ВСЕ непрзорачные объекты;
    - при отрисовке прозрачных объектов, выключаем для них запись в буффер глубины, но оставляем включенным тест на глубину (Z-test).

    Этот метод всегда работает правильно, если тип блендинга (прозрачности) задан как суммирование (GL_ONE, GL_ONE) так как от перемены мест слагаемых, сумма не меняется.

    При использовании других типов прозрачности, будут артефакты.

    !! и все это без сортировки!!
  • @!!ex © (12.10.09 13:36) [25]
    > [24] main ©   (12.10.09 13:33)

    Мля....
    Ключевой момент "ВЫКЛЮЧЕННЫЙ DEPTH TEST". О чем я и CryptoGen и говорили. А ты о каком-то смешивании пишешь, которое никак проблему не решает.
    Ты ехешку смотрел??? Там близко нет проблемы смешивания. Там проблема буффера глубины.
  • main © (12.10.09 13:49) [26]

    > @!!ex ©   (12.10.09 13:36) [25]


    А я вам толдычу о том:
    1) Для звезд лучше подойдет суммирующее смешивание, чем обычное. Потому-что для звезд такое смешивание красивее.))
    2) И плюс ко всему, именно такой тип смешивание, решает проблему сортировки.
  • main © (12.10.09 13:58) [27]

    > Ты ехешку смотрел???


    Сейчас вот неполенился посмотрел.
    Если совсем просто, так там добавить нужно то всего пару строчек:

    Procedure TForm1.Draw;
    var
     n:integer;
    begin
     glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
     glLoadIdentity;
     glTranslatef(0, 0, -35);//camera
     //Stars
     glColor3F(1,1,1);
     glEnable(GL_POINT_SPRITE_ARB);

     glEnable( GL_BLEND );
     glBlendFunc( GL_ONE , GL_ONE );
     glDepthMask( False );

     glbegin(GL_POINTS);
       for n:=1 to MaxStars do
         glVertex3f(Stars[n].pos.x,Stars[n].pos.y,Stars[n].pos.z);
     glEnd;
     glDisable(GL_POINT_SPRITE_ARB);
     SwapBuffers(DC);
    end;
  • main © (12.10.09 14:04) [28]
    Вот выделил жирным шрифтом:

    Procedure TForm1.Draw;
    var
    n:integer;
    begin
    glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
    glLoadIdentity;
    glTranslatef(0, 0, -35);//camera
    //Stars
    glColor3F(1,1,1);
    glEnable(GL_POINT_SPRITE_ARB);

    glEnable( GL_BLEND );
    glBlendFunc( GL_ONE , GL_ONE );
    glDepthMask( False );


    glbegin(GL_POINTS);
      for n:=1 to MaxStars do
        glVertex3f(Stars[n].pos.x,Stars[n].pos.y,Stars[n].pos.z);
    glEnd;
    glDisable(GL_POINT_SPRITE_ARB);
    SwapBuffers(DC);
    end;
  • main © (12.10.09 14:06) [29]
    Ну как, красиво? ))
    Артефакты есть? Нет!
  • RGV © (12.10.09 14:24) [30]
    Ну вы еще подеритесь :))
    Вот мои первые шаги в опенгл
    www.roganovg.narod.ru/stars.zip
  • RGV © (12.10.09 14:36) [31]
    кстати
    у меня сложилось впечатление, что вы говорите об одном и том же :)))
  • main © (12.10.09 14:52) [32]
    Я говорю о том, что не надо решать проблему которой на самом деле нет.
    Зачем думать как сортировать, если в данном конкретном примере можно не сортировать.

    Алекс, ты уже выпил яду?
    ))
  • @!!ex © (12.10.09 15:23) [33]
    > [32] main ©   (12.10.09 14:52)

    Даже не надейся. :)
    Я лишь на протяжении 6 постов говорил о том, что смешивание НЕ будет работать с включенным DepthTest'ом.
    Что ты и продемонстрировал в [28]
    Убери строку:
    glDepthMask( False );

    и получишь баги. Если что, эта строка отключает запись в глубину. Что в данном случае равносильно полномю отключению теста глубины.
 
Конференция "Игры" » OpenGL, blend [Delphi, Windows]
Есть новые Нет новых   [134428   +39][b:0][p:0.001]