Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: onemore от Июль 11, 2005, 07:59



Название: русские буквы в OpenGL (renderText)
Отправлено: onemore от Июль 11, 2005, 07:59
Проблемы при выводе русских букв с помощью renderText в контексте OpenGL, QT3.3.4
Кто-нибудь научился обходить?


Название: русские буквы в OpenGL (renderText)
Отправлено: Hellenna от Июль 11, 2005, 12:50
обойти можно используя рендерниг текста реализованный стандартыми средствами OpenGL.   :)
см. glBitmap() и про списки изобржений.


Название: русские буквы в OpenGL (renderText)
Отправлено: onemore от Июль 12, 2005, 06:55
Так и пришлось сделать.


Название: Re: русские буквы в OpenGL (renderText)
Отправлено: Примерный ученик от Май 24, 2008, 08:13
Неужели нельзя заставить renderText писать русскими буквами?


Название: Re: русские буквы в OpenGL (renderText)
Отправлено: Sergeich от Май 24, 2008, 23:08
Неужели нельзя заставить renderText писать русскими буквами?
Если у тебя 4-ая кутешка, попробуй рисовать текст через QPainter


Название: Re: русские буквы в OpenGL (renderText)
Отправлено: Примерный ученик от Май 25, 2008, 11:13
Нет, у меня 3.3.8.

Может у кого есть готовый вариант вывода текста средствами
OpenGL + QT3, а то в примерах все так заморочено...


Название: Re: русские буквы в OpenGL (renderText)
Отправлено: Sergeich от Май 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 - координаты левой нижней точки в системе координат виджета


Название: Re: русские буквы в OpenGL (renderText)
Отправлено: Примерный ученик от Май 25, 2008, 22:25
Спасибо!!!
Отлично работает.
Только переделал под отображение в области ViewPort.
А так - самое то ::)