На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Надписи на русском языке , OpenGL
    Как выводить текст на русском языке ?

    вот такой код есть
    ExpandedWrap disabled
      void FormCreateFont()
      {
          HFONT font;
          HFONT fontsmall;
          HFONT oldfont;
          e::fontbase[0] = glGenLists(96);
          e::fontbase[1] = glGenLists(96);
          //font = CreateFont(-18, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
          //    ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Courier New");
       
          font = CreateFont(-18, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, RUSSIAN_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
              ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Courier New Cyr");
       
          oldfont = (HFONT) SelectObject(e::hdc, font);
          wglUseFontBitmaps(e::hdc, 32, 96, e::fontbase[0]);
          SelectObject(e::hdc, oldfont);
          DeleteObject(font);
          fontsmall = CreateFont(-15, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
              ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Courier New");
          oldfont = (HFONT) SelectObject(e::hdc, fontsmall);
          wglUseFontBitmaps(e::hdc, 32, 96, e::fontbase[1]);
          SelectObject(e::hdc, oldfont);
          DeleteObject(fontsmall);
      }
       
      //...
       
       
      void FormPrintText(char str[256], float x, float y)
      {
          if (str == NULL)
          {
              return;
          }
          glLoadIdentity();
          glTranslatef(x, y, 0.0f);
          glRasterPos2f(0.0f, 0.0f);
          glPushAttrib(GL_LIST_BIT);
          glListBase(e::fontbase[0] - 32);
          glCallLists((GLsizei)strlen(str), GL_UNSIGNED_BYTE, str);
          glPopAttrib();
      }
       
      void FormPaintLabel()
      {
          glColor3f(0.0f, 0.8f, 0.8f);
       
          FormPrintText("Уровень", 24.0f, 629.0f);
       
          //FormPrintText("Level", 24.0f, 629.0f);
       
          FormPrintFloat(e::level, "%03.0f", 90.0f, 629.0f);
          //
          FormPrintText("Key",  737.0f, 629.0f);
          FormPrintFloat(e::key, "%03.0f", 782.0f, 629.0f);
          //
          FormPrintText("Day", 24.0f, 16.0f);
          FormPrintFloat(e::daycurr, "%03.0f", 70.0f, 16.0f);
          FormPrintText("/", 102.0f, 16.0f);
          FormPrintFloat(e::daymax, "%03.0f", 113.0f, 16.0f);
          //
          FormPrintText("Magic", 715.0f, 16.0f);
          FormPrintFloat(e::magic, "%03.0f", 782.0f, 16.0f);
          glPopMatrix();
      }

    на английском надписи выводятся а на русском нет, что не так ?
    Сообщение отредактировано: F0X -
      Цитата F0X @
      на английском надписи выводятся а на русском нет, что не так ?
      Размер списка. Надо делать с учётом, что наши буквы идут в уникоде с номера 0x400:
      ExpandedWrap disabled
            e::fontbase[0] = glGenLists(96 + 0x400);
            e::fontbase[1] = glGenLists(96 + 0x400);


      Добавлено
      П.С. ну и, конечно, придётся двухбайтовой кодировкой пользоваться:
      ExpandedWrap disabled
        FormPrintText(L"Уровень", 24.0f, 629.0f);
        glCallLists((GLsizei)wcslen(str), GL_UNSIGNED_SHORT, str);
        void FormPrintText(wchar_t str[256], float x, float y)
        Попробовал подставить в код игры

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

        За подсказку спасибо
        Сообщение отредактировано: F0X -
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0204 ]   [ 15 queries used ]   [ Generated: 19.03.24, 05:32 GMT ]