![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| Илья85 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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(...), что не совсем хорошо... Заранее благодарю за помощь! Спасибо! |
|||
|
||||
| Илья85 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.3.2007 Репутация: нет Всего: нет |
Причем, если в функции wglUseFontOutlines вместо WGL_FONT_POLYGONS использовать WGL_FONT_LINES (контурный шрифт), то первая проблема отпадает...
Странная очень штука... Сейчас вынужден исполоьзовать контурный шрифт...:( Помогите, пжлст, кто в курсе!! Спасибо. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
С текстурами работаешь? glEnable(GL_TEXTURE_2D) ?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Albanec |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Точно такаяже проблема с цветом текста.
Я так понял что проблема именно в текстурах, как сделать так что выводимыи текст не принимал цвета текстуры? |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
Перед функцией вывода текста выключить текстуры. glDisable(GL_TEXTURE_2D)
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| MTWizard |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 8.10.2007 Где: Київ Репутация: нет Всего: 4 |
Возможно, проблема заключается в другом: при выводе текста нужно отключать освещение, при этом цвет текста не будет меняться в зависимости от положения источника света
соответственно, после рисования нужно освещение включить |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |