Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > GL_LINE_LOOP c заливкой


Автор: ltise 4.7.2012, 14:01
Всем привет! подкажите чайнику плиз:

рисую кучу замкнутых линий в лист и потом отрисовывю это лист по paint:

Код

GlMainWindow::GlMainWindow(...) : QGLWidget(...)
{
  createPaintingTest();
}

void GlMainWindow::paintGL()
{
  glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
  glClear( GL_COLOR_BUFFER_BIT );

  glColor3f( 1.0f, 0.0f, 0.0f );

  glPushMatrix();

  glLineWidth(1);

  glCallList(gl_list);

  glPopMatrix();
}


void GlWidget::createPaintingTest()
{
  makeCurrent(); 
  gl_list = glGenLists(1);

  glNewList(gl_list, GL_COMPILE);

  for(....)
  {
    myCurve curve = *iter;

    glColor3f( 0.0f, 0.0f, 0.0f);

    glBegin(GL_LINE_LOOP);

    for (myCurve::data_iterator iter = curve.dataBegin(); iter.haveNext();)
    {
      // по идее тут должны быть кривые Безье
      float x = iter.x();
      float y = iter.y();
      glVertex2d(x, y);
    }
    glEnd();

  }
  glEndList();



Подскажите плиз: 

1. что надо сделать чтобы замкнутые линии рисовались с заливкой ?
(что то типа painter.setBrush(QBrush(...))

2. Как можно использовать кривые Безье ?

Сорри что не прочитал все литературу по OpenGl, нужно быстро сваять тест smile

Заранее спасибо

Автор: Amp 4.7.2012, 15:53
1. Из линий, составляющих замкнутый контур, построить полигон нужного тебе цвета (GL_POLYGON тот же, только в этом случае он должен быть выпуклым). Затем по тем же точкам нарисовать линии.
2. Самому нарисовать их из линий. Можно использовать evaluator-ы, через glEvalCoord.ъ

Раз уж ты используешь Qt, то лучше просто бери QPainter и рисуй 2d-графику посредством него. И проще и более качественный результат.

Автор: ltise 4.7.2012, 15:59
Цитата(Amp @ 4.7.2012,  15:53)
1. Из линий, составляющих замкнутый контур, построить полигон нужного тебе цвета (GL_POLYGON тот же, только в этом случае он должен быть выпуклым). Затем по тем же точкам нарисовать линии.
2. Самому нарисовать их из линий. Можно использовать evaluator-ы, через glEvalCoord.ъ

Раз уж ты используешь Qt, то лучше просто бери QPainter и рисуй 2d-графику посредством него. И проще и более качественный результат.

QPainter - в смысле с OpenGL ?

Автор: Amp 4.7.2012, 16:42
Если у тебя только 2d-графика, то просто рисовать QPainter-ом в каком-нибудь виджете, не прибегая к OpenGL. 

Автор: ltise 4.7.2012, 16:55
Цитата(Amp @ 4.7.2012,  16:42)
Если у тебя только 2d-графика, то просто рисовать QPainter-ом в каком-нибудь виджете, не прибегая к OpenGL.

К сожалению не подходит.... куча очень длинных перемешанных кривых с заливкой - тормоза жуткие, что со сценой, что без сцены..векторные картинки типа:
user posted image
группировать линии для дерева и оптимизировать отрисовку тоже не прокатывает - надо сначала эти линии резать.... вощем сплошной головняк   smile 

OpenGL все устраивает, особенно простота.
Надо только прояснить некоторые моменты smile

Автор: Amp 4.7.2012, 17:18
Как хочешь. Тот же QPainter имеет OpenGL-бэкэнд - его это не сильно спасает smile Кажущаяся простота акунется потом производительностью и будешь ты геометрию раскидывать по буферам, грузить в видеопамять, думать как и что отсекать. Я б накидал еще тестов на cairo и direct2d - поглядел как там дела обстоят.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)