Конференция "Игры" » OpenGL текстура + alpha канал [Delphi, Kylix, C++ Builder, JBuilder, Windows, Linux]
 
  • V@s_!s_D@s © (09.05.10 01:50) [20]
    Сам его три дня назад начал изучать, Поэтому возможно ошибаюсь, НО:
    В книге краснова, например рисуется изображение дырки. То есть я так понял, происходит сперва заполнение трафарета, и уже после рисование.
    Но там у него не очень понятно - использовать можно, благо он даёт исходники, но вот разобратся очень сложно.
    А вот позавчера нашёл интересную статью Вот ссылка
    "http://citforum.proc.ru/programming/opengl/opengl_04.shtml"
    сейчас её подробнейше изучаю - там очень подробно и детально изложен алгоритм.
    Вот что я понял:
    (там куб и сфера)
    сперва рисуем - заполняем трафарет на +1 там где рисуем.
    glStencilFunc(GL_ALWAYS, 1, 0);
    glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
    auxSolidCube(2.5);
    Хотя возможно тут я ошибаюсь, но как понимаю данную команду, она рисует примитив, и где рисует, заполняет на +1.
    Потом ещё также. И местами изменяем это благообразие ещё на +1.
    потом очищаем буферы все, кроме трафарета (имеем дырявую фигуру, т.е заполненую разными значениями).
    Потом запрещаем буфер трафарета(не очищаем) и рисуем.
    потом включаем трафарет и рсуем дырявую фигуру.
    // разрешаем тест трафарета и рисуем дырявый куб
    glEnable(GL_STENCIL_TEST);
    glStencilFunc(GL_EQUAL, 1, 255);
    glColor3d(1,1,1);
    auxSolidCube(2.5);
    Я признаюсь, пробовал только красновскую версию.
    Так или примерно так было написано в различных найденых мной исходниках.
    Получается, если в буфере глубины есть изображение етой фигуры, то мы можем рисовать и за ней (я так понял, что буфер глубины не заполняется, ведь изображение там не рисуется). Правда буфер глубины, как я понимаю проверяет все пикселы экрана, а не фигуры, но вот для этой фигуры и будем его включать.
    или воти чёто тут интересное нашёл
    ->http://opengl.org.ru/books/open_gl/chapter4.12.html
  • @!!ex © (09.05.10 08:19) [21]
    И так. Есть забор с узором:
    http://www.dxf.ru/images/zabor_03.gif

    Как ты будешь стенсилем вырезать эти дыры?

    Текстуру с альфой я нарисую минут за 10 и она будет прекрасно работать.
  • V@s_!s_D@s © (09.05.10 09:04) [22]
    Ага,  (с праздником победы тебя) то есть ты уже согласен, что так можно делать.
    Не, вообще есть такая функция трафарета, не помню, как пишется, каюсь,
    прибавляет +1. и соответственно всю текстуру анализируем на цвет, или ещё как нибудь - не важно. важно, что по какомунибудь шаблону и используем эту функцию.
    Я её ещё не применял, но думаю сработает.
    Получается следующее: стенсил труднее алгоритмически, но зато универсальнее, хотя ,согласен, при использовании медленнее.
    бленд Быстрее при использовании, но не изменяется произвольно, т.е текстуру надо перезадавать, а трафарет к томуже допускает , хотя это я ещё не проверял, но должно быть так, рисование позади себя, а бленд должен рисоватся по порядку.
  • @!!ex © (09.05.10 09:10) [23]
    Так НЕЛЬЗЯ делать.
    Стэнсиль для других вещей предназначен.
    И то что ты предлагаешь делать убьет производительность и не даст НИКАКИХ преимуществ.

    Помойму тебе тупо лень разбираться в том, как делать правлиьно и хорошо, и ты ищешь решение в рамках своего знания(не знания?).

    Мой тебе совет: напиши собственный software 3D. Мозги прочищает основательно.
  • @!!ex © (09.05.10 09:10) [24]
 
Конференция "Игры" » OpenGL текстура + alpha канал [Delphi, Kylix, C++ Builder, JBuilder, Windows, Linux]
Есть новые Нет новых   [118231   +25][b:0][p:0]