Circular Progress на OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем Relic, 1 июн 2009.

  1. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    А ещё лучше - нарисовать это всё со всякими блендингами и размытием краёв в каком-нибудь иконочном редакторе, сохранить в PNG или новомодном BMP с прозрачностью, и самым пошлейшим образом отрисовывать на bitmap.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Можно и на GDI+
     
  3. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    _basmp_
    Я вообще-то подумал насчет использования типа PT_BEZIERTO для закругления с помощью кривой Безье, но не знаю, как вычислить контрольную точку для нее.
    Округляет в сторону уменьшения.
    CyberManiac
    Как-то не кошерно :)
    Y_Mur
    Не силен в этом. Если не трудно, можно пример?
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Relic
    зачем? гди функции считают точки и соединяют их линиями. если посчитаете точки вы сами и соедините линиями что изменится?
    возможно это не лучший вариант
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _basmp_
    То что для гладкости придётся считать достаточно большой массив опорных точек, который будет обрабатываться GDI как ломаная, что в любом случае как минимум некрасиво. Кривая Безье по четырём опорным точкам полюбому лучше, но как ни странно ни гугл ни wiki не сообщили сколько-нибудь толковой информации по методике преобразования произвольного сегмента окружности в эквивалентную безье - чуть попозже запостю эту методику здесь.

    Да это тоже источник артефактов, я из-за этого в С++ с /QIfist графику компилю.
     
  6. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Y_Mur
    Ок, ждем...
     
  7. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    _basmp_
    Дошел до заливки сектора и оказывается, что установка brush никак не влияет на заливку сегмента :dntknw:
    Надо что-то другое придумывать!
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Y_Mur
    5-6 на кривую сторону - вполне даже в крупном случае
    оно всегда так. любая кривая рисуется как ломаная

    ф принципе что мешает сделать и через безье без приведения? сектор стнет овальным, а вся конструкция - ромашкообразной, что кросивеее
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Relic
    PT_CLOSEFIGURE применяли? и замыкающая точка не надо
     
  10. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    _basmp_
    Действительно, теперь обходимся без пятой точки (к 4-й применил тип = PT_LINETO or PT_CLOSEFIGURE). Это хорошо, но заливки-то контура все равно нет! Что с этим делать?
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Relic
    это
    Polygon
    красит нормально.
     
  12. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Relic
    http://www.wasm.ru/forum/viewtopic.php?pid=321473#p321473
    Кстати ещё можешь заюзать функцию Pie (в GDI) или DrawPie (в GDI+), а затем закрасить середину контрола кругом, и добавить разделы между секторами с помощью обычных радиальных линий. Если это сделать с предварительной буферизацией изображения, то на взгляд "подтасовку" никто не определит :)) Хотя имхо рисовать лишнее, чтобы потом закрашивать это не дзен :))

    _basmp_
    Если это и так то на уровне пикселов, а не на уровне 5-6 сегментов в крупном случае :) да и вообще некрасивый это подход. Оптимальным для системы в этом случае юзать что-нибудь типа алгоритма Брезенхэма (не знаю есть ли в природе вариант для Безье). Но полюбому win GDI даже на резких перегибах не «халтурит» и рисует с околопиксельной точностью, но даже если бы и халтурила, всё равно кривая Безье это базовый инструмент для рисования кривых и пренебрегать им не стоит :)
     
  13. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    _basmp_
    Есть еще выход, это:
    BeginPath(H);
    PolyDraw(H, a_pt, a_t, 48);
    EndPath(H);
    StrokeAndFillPath(H);

    Y_Mur
    Спасибо за инфу.
     
  14. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Y_Mur
    однопиксельная точность это и есть халтура. каиро пикселя еще дополнительно разбивает на 4, а агг на 10. сравните качество с гди. но рисуют в конечном итоге все именно как ломаные.
    кстати, насчет брезенхема, в агг есть пример отрисовки окружностей разными способами, включая брезенхема. тс, сравните и прочувствуйте