Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Вывод текста в OpenGL.


Автор: Malloc 13.12.2005, 20:35
Каким образом я могу вывести текст на экран, используя OpenGL. Везде пишут (в книгах), как выводить точки, линии, сферы и т.д. Но про текст ничего не говорят. Может, кто-нибудь знает, как это сделать?

Автор: Darhazer 13.12.2005, 23:54
Насчет текст я делаю так:
Делаю картинку, которая содержить все букви и цифри. Потом пользую как текстуру ту част картинке, которая мне нужна
В сам OpenGL нет функции для вивода текста, но в библиотеках, которые обично пользуют с OpenGL (wgl наприер) есть таких...

Автор: Malloc 14.12.2005, 19:02
Вчера скачал книжку по OpenGL хтмльную, и правда, придется все шрифты рисовать самому. А есть ли способ импортировать обычные шрифры Windows (*.ttf) и использовать их?

Автор: Darhazer 15.12.2005, 12:15
Можно через wgl. Читай http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13
К стате библиотека для рендеринга текстов- http://www.forexseek.com/glf/

Автор: Xerx 25.1.2006, 16:50
Еще стоит почитать Краснова, у него несколько примеров на вывод текста: что-то с bitmap'ами, 3D-текстом через ttf, дисплейные списки по каждому символу и ;) GDI(даже не читай!!!)

Автор: Andreyexe 23.4.2006, 20:32
http://pmg.org.ru/nehe/index.html
Здесь есть и вывод текста и вобще всё чё надо.И под разные языки. 

Автор: Artiom 24.4.2006, 11:24
Код

GLvoid buildFont(GLvoid)    
{    
    XFontStruct *font;    
     
    base = glGenLists(96);      /* storage for 96 characters */    
    /* load a font with a specific name in "Host Portable Character Encoding" */    
    font = XLoadQueryFont(GLWin.dpy,    
        "-*-helvetica-bold-r-normal--24-*-*-*-p-*-iso8859-1");    
    if (font == NULL)    
    {    
        /* this really *should* be available on every X Window System...*/    
        font = XLoadQueryFont(GLWin.dpy, "fixed");    
        if (font == NULL)    
        {    
            printf("Problems loading fonts :-(\n");    
            exit(1);    
        }    
    }    
    /* build 96 display lists out of our font starting at char 32 */    
    glXUseXFont(font->fid, 32, 96, base);    
    /* free our XFontStruct since we have our display lists */    
    XFreeFont(GLWin.dpy, font);    
}    
///////////////////////////////////////////////////////////////////////////////////    
GLvoid printGLf(const char *fmt, ...)    
{    
    va_list ap;     /* our argument pointer */    
    char text[256];    
    if (fmt == NULL)    /* if there is no string to draw do nothing */    
        return;    
    va_start(ap, fmt);  /* make ap point to first unnamed arg */    
    /* FIXME: we *should* do boundschecking or something to prevent buffer    
    * overflows/segmentations faults    
    */    
    vsprintf(text, fmt, ap);    
    va_end(ap);    
    glPushAttrib(GL_LIST_BIT);    
    glListBase(base - 32);    
    glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);    
    glPopAttrib();    
}

Вот когда-то так делал. TTF тоже можно юзать  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)