Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: kobra от Май 29, 2010, 23:15



Название: Текст в OpenGL
Отправлено: kobra от Май 29, 2010, 23:15
Здраствуйте!
Сейчас работаю над тем что строю график функции с помощью библиотеки OpenGl.
У меня есть клас Graph который должен как раз все рисовать. Он унаследован от класа QGLWidget. Дальше я привязал этот виджет к моему главному окну:

Код:
Graph *gr = new Graph(ui->centralWidget);

В методе paintGL() я прописал алгоритм построения графика(и к моему удивлению без всяких проблем я получил желаемый результат почти сразу).

Но на графике конечно же нужно понадписывать оси, а также некоторые значения. Думал воспользоваться функцией renderText(). Но я ее или криво использую или она все-таки делает не то что мне нужно. Насколько я понял, она работает совсем не так, как другие функции библиотеки(к примеру glVertex2f). Тойсть если я использую процедуру glVertex2f и передаю туда координаты 100, 100 то в функции renderText координаты 100, 100 это совсем другое место. Плюс насколько я понял, если я буду менять размер моего окна, то график будет тоже расширяться но текст останеться на том же месте.

Как мне решить эту проблему?

Заранее благодарен


Название: Re: Текст в OpenGL
Отправлено: break от Май 30, 2010, 10:53
renderText работает в screenSpace - поэтому естественно координаты не совпадают, но привязать его к вашим точкам на графике можно - для этого прийдется написать функцию преобразования WorldSpace координат в ScreenSpace координаты. Размер текста действительно не меняется (по той же причине) - но если есть увеличение / уменьшение для ваших графиков - то можно попробовать менять размер шрифта для renderText как то пропорционально.


Название: Re: Текст в OpenGL
Отправлено: kobra от Май 30, 2010, 12:00
Спасибо, таким способом работает.
Еще такой вопрос могу ли я рисовать с какого нибудь другого метода моего класса(не paintGL())?


Название: Re: Текст в OpenGL
Отправлено: Авварон от Май 30, 2010, 12:21
а доку мы не читаем?
Код:
void QGLWidget::renderText ( double x, double y, double z, const QString & str, const QFont & font = QFont(), int listBase = 2000 )
This is an overloaded function.
x, y and z are specified in scene or object coordinates relative to the currently set projection and model matrices.


Название: Re: Текст в OpenGL
Отправлено: kobra от Май 30, 2010, 19:29
читал но чесно говоря не понял что имелось ввиду... со своим вторым вопросом разобрался, просто надо чтоб тот метод вызовался из paintGL


Название: Re: Текст в OpenGL
Отправлено: Авварон от Май 30, 2010, 20:24
функция с 2мя координатами работает в оконной системе координат
функцмя с 3мя - в координатах сцены