Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с текстом в OpenGL 
:(
    Опции темы
Илья85
Дата 18.3.2007, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.3.2007

Репутация: нет
Всего: нет



Работаю сейчас с векторными шрифтами в OpenGL.
Существует некоторая проблемка, которюу не могу разрешить уже на протяжении долгого времени.

Был бы признателен за помощь.

Вот использование:

1. Функция вывода:
GLvoid glPrint(const char *fmt, ...)
{
    float        length=0;
    char        text[256];
    va_list        ap;                            
    if (fmt == NULL)
        return;                                
    va_start(ap, fmt);
        vsprintf(text, fmt, ap);
    va_end(ap);                                

    glPushMatrix();
    glPushAttrib(GL_LIST_BIT);
    glListBase(base);
    glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
    glPopAttrib();
    glPopMatrix();
}

Функция DrawGLScene(GLvoid):
int DrawGLScene(GLvoid)    
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f,0.0f,-10.0f);
    glRotatef(rot*1.0f,0.0f,0.0f,1.0f);
    glColor3f(1.0f*float(cos(rot/20.0f)),1.0f*float(sin(rot/25.0f)),1.0f-0.5f*float(cos(rot/17.0f)));
    glPrint("NeHe - %5d",51);
    rot+=0.05f;

// в следующем полигоне игнорируется установка цвета в белый. 
// Вместо этого он отображается темно серым
// Причем после первого вывода на экран текста 
// установка цвета для последующих других примитивов также игнорируется (все они серые).
// Установка же цвета для последующего вывода текста всегда работает.
// Как я понял такую ситуацию вызывает glCallLists(..).
// Но почему так происходит? Ведь мы используем glPopAttrib(); glPopMatrix();
// Прошу помочь

    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glColor3d(1, 1, 1);
    glLineWidth(2);
    glBegin(GL_POLYGON);
        glVertex2d(0, 0);
        glVertex2d(2.98, .11);
        glVertex2d(2.98, .25);
        glVertex2d(3.8, .25);
        glVertex2d(3.8, -.25);
        glVertex2d(2.98, -.25);
        glVertex2d(2.98, -.11);
    glEnd();

    return TRUE;
}

2. Функция BuildFont(GLvoid):
GLvoid BuildFont(GLvoid)                                // Build Our Bitmap Font
{
    HFONT    oldFont;                                    // Used For Good House Keeping
    wglMakeCurrent( hDC, hRC );

    base = glGenLists(256);                                // Storage For 256 Characters
    font = CreateFont( -50,                            // Height Of Font
                        0,                                // Width Of Font
                        0,                                // Angle Of Escapement
                        0,                                // Orientation Angle
                        FW_NORMAL,                        // Font Weight
                        FALSE,                            // Italic
                        FALSE,                            // Underline
                        FALSE,                            // Strikeout
                        ANSI_CHARSET,                    // Character Set Identifier
                        OUT_TT_PRECIS,                    // Output Precision
                        CLIP_DEFAULT_PRECIS,            // Clipping Precision
                        ANTIALIASED_QUALITY,            // Output Quality
                        FF_DONTCARE|DEFAULT_PITCH,        // Family And Pitch
                        "Courier New");                // Font Name


    SelectObject(hDC, font);                            // Selects The Font We Want

    wglUseFontOutlines(    hDC,                            // Select The Current DC
                        0,                                // Starting Character
                        255,                            // Number Of Display Lists To Build
                        base,                            // Starting Display Lists
                        0.0f,                            // Deviation From The True Outlines
                        0.01f,                            // Font Thickness In The Z Direction
                        WGL_FONT_POLYGONS,                // Use Polygons, Not Lines
                        gmf);                            // Address Of Buffer To Recieve Data

}

Вторая проблема в том, что изменение высоты и ширины фонта в CreateFont(...) также не дает никакого эффекта.
Приходится использовать glScalef(...), что не совсем хорошо...

Заранее благодарю за помощь!
Спасибо!
PM MAIL   Вверх
Илья85
Дата 18.3.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.3.2007

Репутация: нет
Всего: нет



Причем, если в функции wglUseFontOutlines вместо WGL_FONT_POLYGONS использовать WGL_FONT_LINES (контурный шрифт), то первая проблема отпадает...

Странная очень штука...

Сейчас вынужден исполоьзовать контурный шрифт...:(

Помогите, пжлст, кто в курсе!!
Спасибо.
PM MAIL   Вверх
Rickert
Дата 19.3.2007, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



С текстурами работаешь? glEnable(GL_TEXTURE_2D) ?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Albanec
Дата 8.12.2007, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.12.2007

Репутация: нет
Всего: нет



Точно такаяже проблема с цветом текста.
Цитата

С текстурами работаешь? glEnable(GL_TEXTURE_2D) ?

Я так понял что проблема именно в текстурах, как сделать так что выводимыи текст не принимал цвета текстуры?

PM MAIL   Вверх
Rickert
Дата 8.12.2007, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Перед функцией вывода текста выключить текстуры. glDisable(GL_TEXTURE_2D)


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MTWizard
Дата 9.12.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.10.2007
Где: Київ

Репутация: нет
Всего: 4



Возможно, проблема заключается в другом: при выводе текста нужно отключать освещение, при этом цвет текста не будет меняться в зависимости от положения источника света

Код

glDisable(GL_LIGHTING);


соответственно, после рисования нужно освещение включить

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.