crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как нарисовать текст в углу QGlWidget?
RazrFalcon
  опции профиля:
сообщение 14.10.2012, 20:19
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Есть сцена в gl. Нужно в углу выводить инфу. Не пойму как эти координаты получить.
Рисую через renderText();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Snake174
  опции профиля:
сообщение 15.10.2012, 4:58
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 18.4.2011
Из: Миасс
Пользователь №: 2613

Спасибо сказали: 9 раз(а)




Репутация:   0  


Ну смотря в каком углу надо выводить и где у тебя точка отсчёта (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();


Сообщение отредактировал Snake174 - 15.10.2012, 8:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 15.10.2012, 14:35
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Все равно в центре рисует =/

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

Вот мой код:
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();

// тут рисую фигуры
}


Сообщение отредактировал RazrFalcon - 15.10.2012, 14:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Snake174
  опции профиля:
сообщение 16.10.2012, 5:09
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 18.4.2011
Из: Миасс
Пользователь №: 2613

Спасибо сказали: 9 раз(а)




Репутация:   0  


А если так попробовать:
Началом отсчёта делаем верхний левый угол.
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" );  // верхний левый угол

Вставляй код после отрисовки фигур, иначе текст будет перекрываться ими.

Сообщение отредактировал Snake174 - 16.10.2012, 7:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 16.10.2012, 16:41
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Хм... таки заработало, правда пришлось переписать вот так, иначе сам рисунок тоже отображался в углу.
    // 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 неделю

Сообщение отредактировал RazrFalcon - 16.10.2012, 16:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vankleef
  опции профиля:
сообщение 17.10.2012, 21:08
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 21.10.2010
Пользователь №: 2134

Спасибо сказали: 9 раз(а)




Репутация:   1  


Если не критично, то можно через qDebug() выводить.
Тоже как-то пытался текст вывести, так и ниасилил
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 18.10.2012, 15:16
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Та я тоже через qDebug сначала выводил. Но надоело захламлять выхлоп проги.
Да и, имхо, дебаг слегка медленней GL. Учитывая сколько раз он вызывается.

Да и проблема по сути решена, в углу выводит ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 28.1.2013, 14:57
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата(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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 6:32