Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как нарисовать текст в углу QGlWidget?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
RazrFalcon
Есть сцена в gl. Нужно в углу выводить инфу. Не пойму как эти координаты получить.
Рисую через renderText();
Snake174
Ну смотря в каком углу надо выводить и где у тебя точка отсчёта (0;0;0) находится - в центре или в левом верхнем углу.
Если точка отсчёта (0;0;0) находится в центре, а вывести нужно в левый нижний угол, можно попробовать так:
glPushMatrix();
glLoadIdentity();
glTranslatef( -width() / 2 + 10, -height() / 2 + 10, 0.0f );
renderText( 0.0, 0.0, 0.0, "Text" );
glPopMatrix();
RazrFalcon
Все равно в центре рисует =/

У меня в общем центр координат в центре виджета.

Вот мой код:
void SceneGL::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_MULTISAMPLE);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glScalef(nSca, nSca, nSca);
    glTranslatef(xPos, -yPos, 0);

    glPushMatrix();
//    glLoadIdentity(); // с раскоментированным текста нет вообще
    glTranslatef( -width() + 10, -height() + 10, 0.0f );
    renderText( 0.0, 0.0, 0.0, "Text" );
    glPopMatrix();

// тут рисую фигуры
}
Snake174
А если так попробовать:
Началом отсчёта делаем верхний левый угол.
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glViewport( 0, 0, width(), height() );
glOrtho( 0.0, width(), height(), 0.0, -1.0, 1.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
renderText( 10.0, 10.0, 0.0, "Text" );  // верхний левый угол

Вставляй код после отрисовки фигур, иначе текст будет перекрываться ими.
RazrFalcon
Хм... таки заработало, правда пришлось переписать вот так, иначе сам рисунок тоже отображался в углу.
    // draw text
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glViewport( 0, 0, width(), height() );
    glOrtho( 0.0, width(), height(), 0.0, -1.0, 1.0 );
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    renderText(10.0, 20.0, 0.0, "Text" );  // верхний левый угол

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    GLfloat ratio = (GLfloat)height() / (GLfloat)width();
    if (width() >= height())
        glOrtho(-1.0/ratio, 1.0/ratio, -1.0, 1.0, -10.0, 1.0);
    else
        glOrtho(-1.0, 1.0, -1.0*ratio, 1.0*ratio, -10.0, 1.0);
    glViewport(0, 0, (GLint)width(), (GLint)height());

// тут рисую фигуры, текст все равно их перекрывает =/

Возможно не совсем правильно, но вроде как работает.

Спасибо.

PS: я с GL неделю
vankleef
Если не критично, то можно через qDebug() выводить.
Тоже как-то пытался текст вывести, так и ниасилил
RazrFalcon
Та я тоже через qDebug сначала выводил. Но надоело захламлять выхлоп проги.
Да и, имхо, дебаг слегка медленней GL. Учитывая сколько раз он вызывается.

Да и проблема по сути решена, в углу выводит ;)
lanz
Цитата(RazrFalcon @ 14.10.2012, 21:19) *
Есть сцена в gl. Нужно в углу выводить инфу. Не пойму как эти координаты получить.
Рисую через renderText();


Может кому то еще понадобится.
Нужно использовать другую перегрузку renderText -
void QGLWidget::renderText ( int x, int y, const QString & str, const QFont & font = QFont(), int listBase = 2000 )

http://doc.qt.digia.com/qt/qglwidget.html#renderText

Там же внизу ссылка на пример оверпэйнта с помощью QPainter::drawText
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.