Russian Qt Forum
Ноябрь 25, 2024, 07:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: русские буквы в OpenGL (renderText)  (Прочитано 14680 раз)
onemore
Гость
« : Июль 11, 2005, 07:59 »

Проблемы при выводе русских букв с помощью renderText в контексте OpenGL, QT3.3.4
Кто-нибудь научился обходить?
Записан
Hellenna
Гость
« Ответ #1 : Июль 11, 2005, 12:50 »

обойти можно используя рендерниг текста реализованный стандартыми средствами OpenGL.   Улыбающийся
см. glBitmap() и про списки изобржений.
Записан
onemore
Гость
« Ответ #2 : Июль 12, 2005, 06:55 »

Так и пришлось сделать.
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #3 : Май 24, 2008, 08:13 »

Неужели нельзя заставить renderText писать русскими буквами?
Записан

Как мало времени и как много нужно узнать
Sergeich
Гость
« Ответ #4 : Май 24, 2008, 23:08 »

Неужели нельзя заставить renderText писать русскими буквами?
Если у тебя 4-ая кутешка, попробуй рисовать текст через QPainter
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #5 : Май 25, 2008, 11:13 »

Нет, у меня 3.3.8.

Может у кого есть готовый вариант вывода текста средствами
OpenGL + QT3, а то в примерах все так заморочено...
« Последнее редактирование: Май 25, 2008, 11:16 от tmikola » Записан

Как мало времени и как много нужно узнать
Sergeich
Гость
« Ответ #6 : Май 25, 2008, 17:10 »

Тогда как-нибудь так:
Код:
void renderText( QGLWidget* w, int x, int y, const QString& text, const QColor& col = Qt::white, const QFont& font = QFont() )
{
    glMatrixMode( GL_PROJECTION );
    glPushMatrix();             
    glLoadIdentity();             
    glOrtho( 0, w->width(), w->height(), 0, 0, 1 );
    glMatrixMode( GL_MODELVIEW );
    glPushMatrix();             
    glLoadIdentity();             

QFontMetrics fm(font);
QRect rect = fm.boundingRect( text);

QPixmap pixmap( rect.size() );
pixmap.fill( Qt::black );
QPainter painter(&pixmap);
painter.setPen( Qt::white );
painter.setFont( font );
painter.drawText( -rect.left(), -rect.top(), text );

QImage img = pixmap.convertToImage();
img.setAlphaBuffer( true );
for ( int i = 0; i < img.height(); i++ ) {
QRgb* rgb = (QRgb*) img.scanLine(i);
for ( int j = 0; j < img.width(); j++ ) {
rgb[j] = qRgba( col.red(), col.green(), col.blue(), qRed(rgb[j]) );
}   
}
img = QGLWidget::convertToGLFormat(img);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glRasterPos2i( x, y );
glDrawPixels( rect.width(), rect.height(), GL_RGBA, GL_UNSIGNED_BYTE, img.bits() );
glDisable(GL_BLEND);
glMatrixMode( GL_PROJECTION );
    glPopMatrix();             
    glMatrixMode( GL_MODELVIEW );
    glPopMatrix();             
}
x, y - координаты левой нижней точки в системе координат виджета
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #7 : Май 25, 2008, 22:25 »

Спасибо!!!
Отлично работает.
Только переделал под отображение в области ViewPort.
А так - самое то Строит глазки
Записан

Как мало времени и как много нужно узнать
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.141 секунд. Запросов: 23.