Заливка произвольных фигур в OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем TermoSINteZ, 25 ноя 2008.

  1. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Здравствуйте гуру асма.
    Давненько меня тут небыло, но поправимо, буду чаще. Если рады видеть..
    Вопрос по сабжу.
    Но немного конкретизирую.
    Во первых Blending. Как многим известно, на разных видеосистемах он поразному воспроизводится. Но это вступление.
    Поехали:
    Есть многоугольники. Рисуются по угловым точкам. Они могут быть выпуклыми а могут быть и нет (например звезда).
    Русуются так (знаю что банально, средствами OGL) :
    Код (Text):
    1. glBegin(GL_POLYGON)
    2. ...
    3. glVertex2d(...)
    4. ...
    То есть по точкам. В режиме полигонов. Естественно это все круто работает, пока не начнешь рисовать что-то невыпуклое.
    Но это еще не все. Так как у полигонов установлена прозрачность и включен блендинг, при отображении я вижу треугольники из которых состоит многоугольник (линии видны становятся). При отключении блендинга, линии естественно пропадают , как и сама прозрачность.
    Далее...
    Есть окружность. Рисуется распространенным методом
    Код (Text):
    1. glBegin(GL_TRIANGLE_FAN)
    2. ...
    3. далее в цикле вращаем точки по окружности
    4. glVertex2d
    5. ....
    Естественно ситуация лучше - выпуклая фигура. Но блендинг все портит - видны сотни треугольничков из которых окружность составлена.

    Итак. Теперь вопросы к вам, васмовцы.
    1) Кто нить знает другие средства заливки фигур С помощью OGL?
    2) Если таких нет, может подскажете более оптимизированный способ заливки (не делая доступ к пикселям и проверяя пока не встретиься граница фигуры, далее заполняя линии до следующей границы). Возможно можно делать текстурирование. Тогда подскажите пример ненавязчиво, и на сколько это эффективно именно для произвольных (но замкнтых фигур).
    3) Что делать с блендом...?
     
  2. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Произвольные многоугольники выводятся как совокупность GL_TRIANGLE`ов (причём лучше через какой-нибудь glMultiDrawElements, чтобы рисовать все многоугольники сразу).

    Я так понял, что ты генерируешь многоугольники в программе. Если геометрия меняется не часто можно использовать VBO.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    murder
    Да, многоугольники рисует пользователь по опорным точкам, геометрия не меняется пока только на текущем этапе, но в дальнейшем планируется изменение масштаба, и поворот этих многоугольников, а возможно даже изменение положения опорных точке.
    За сслыку спасибо, хоть что-то..
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    TermoSINteZ
    Попробуй glEdgeFlag.

    А тесселяция вот - http://www.progz.ru/articles.php?view=51
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Booster
    Про тесселяцию, тоже была мысль, тока толково не видел описания - спасибо за ссылку, я попробую
    на сколько это будет быстро работать кстати? по сравнению с вертексными вершинами?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну вообщем-то колбэки сами ничего не делают, а только лишь передают необходимую тесселированную информацию. А что с ней делать, сразу рисовать или сохранить для последующего использования(например в VBO) это им до лампочки. Как правило один раз тесселируем, формируем на основе полученных данных например VBO, ну а далее отрисовка само собой максимально эффективна.
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Нашел время сделать что хотел, сделал тесселяцию с VBO как и советовали. То что мне нужно было. Благодарю. За ссылку особено. Тему можно закрыть.