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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Текст в OpenGl 
:(
    Опции темы
Vizor
  Дата 12.3.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите пожалуйста вывести русский текст с использованием UNICODE. Желательно исходный код.
PM   Вверх
DigitalDummy
  Дата 15.4.2006, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 7.4.2006
Где: В подвале шоколад ной фабрики.

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



А что именно хотите узнать?
  • у Вас есть строка Unicode с Русскими символами и есть Русские буквы в шрифте, но непонятно, как из Unicode строки их подставить для вывода...
  • или просто не понятно как вообще что-то выводить как текст в OpenGL.
??? smile
PM WWW   Вверх
Andreyexe
Дата 22.4.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

или просто не понятно как вообще что-то выводить как текст в OpenGL.

Можна-можна здесь посмотри www.mirgames.ru 
PM MAIL   Вверх
DigitalDummy
Дата 2.5.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 7.4.2006
Где: В подвале шоколад ной фабрики.

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



Надеюсь, Вы не против, если для ответа я приведу исходный код, который Вы написали мне в личном сообщении...

Код

GLvoid CTextOpenGl::CreateFont(HDC hDC)
{
    CFont font;
    base = glGenLists(256);
    font.CreateFont(-5, 0, 0, 0, FW_BOLD, false, false, false, ANSI_CHARSET,
        OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH,
        _T("Arial"));
    SelectObject(hDC, font);
    wglUseFontOutlines(hDC, 0, 255, base, 0.0f, 0.2f, WGL_FONT_POLYGONS, gmf);
}

GLvoid CTextOpenGl::glPrint(float x, float y, float z, wchar_t *string, void *font)
{
    wchar_t *c;
    glRasterPos3f(x, y, z);
    for (c=string; *c != '\0'; c++) 
    {
        glutBitmapCharacter(font, *c);
    }                           
}


Что у Вас в нём не верно?

Главная ошибка в том, что текст в формате Unicode отличается от текста формата ANSI тем, что имеет размер символа WORD (два байта), а не один! То есть, вариантов символов в Unicode тексте намного больше, чем 256! При этом, для вывода текста в OpenGL Вы создаёте набор только из 256 символов с помощью функции wglUseFontOutlines которого явно не хватит для того, чтобы отобразить все Unicode символы! Именно поэтому символы отображаются неправильно. Если Вам нужно использовать все возможные Unicode символы, то и создавать набор надо в количестве 65536 символов.

Но, я бы не сказал, что это хороший выход. По-моему, для вывода текста лучше всего создавать только те символы, которые будут непосредственно использоваться вашей программой.

Ну ладно... Раз уж Вы пошли таким путём, то самое быстрое решение для Вас, как мне кажется, таково:

Во-первых, добавьте в свой код упращенный вариант функции для перевода Unicode-символа в ANSI-символ:
Код

#include <windows.h>   // этот модуль нужно тоже добавить, если он ещё не включен
...
...
char WideCharToChar(const wchar_t Value)
{
    char C[2];
    WideCharToMultiByte(CP_ACP, 0, &Value, 1, C, 1, 0, 0);   // здесь происходит перевод символа
    return C[0];
}
...

А в Вашем коде для вывода текста надо исправить функцию:
Код

GLvoid CTextOpenGl::glPrint(float x, float y, float z, wchar_t *string, void *font)
{
    wchar_t *c;
    glRasterPos3f(x, y, z);

    for (c=string; *c != '\0'; c++) 
    {
        char C = WideCharToChar(*c);   // перевод символа
        glutBitmapCharacter(font, C);
    }
}


Кстати, я никогда не пользовался функцией glutBitmapCharacter, поэтому не знаю сможет ли она правильно вывести на экран char символ и, может быть, потребуется конверсия типа в параметре. Если же текст всё ещё будет выводиться с ошибкой, сообщите и я напишу Вам замену для функции glutBitmapCharacter не прибегая к GLUT функциям.  

Это сообщение отредактировал(а) DigitalDummy - 2.5.2006, 22:21
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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