Надписи на русском языке
    , OpenGL
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    Правила раздела "Программирование графики"
  
    Надписи на русском языке
    , OpenGL
  | 
         
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Как выводить текст на русском языке ? 
        
      вот такой код есть ![]() ![]() 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(); } на английском надписи выводятся а на русском нет, что не так ?  | 
    
| 
         
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата F0X @  Размер списка. Надо делать с учётом, что наши буквы идут в уникоде с номера 0x400:на английском надписи выводятся а на русском нет, что не так ? ![]() ![]()     e::fontbase[0] = glGenLists(96 + 0x400);     e::fontbase[1] = glGenLists(96 + 0x400); Добавлено П.С. ну и, конечно, придётся двухбайтовой кодировкой пользоваться: ![]() ![]() FormPrintText(L"Уровень", 24.0f, 629.0f); glCallLists((GLsizei)wcslen(str), GL_UNSIGNED_SHORT, str); void FormPrintText(wchar_t str[256], float x, float y)  | 
    
| 
         
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Попробовал подставить в код игры 
        
      но к сожалению требуется изменить на юникод во многих местах программы, то добавлять окончания W A, то менять на другие типы, и не только там где вывод текста. Поэтому программа начала сыпаться ошибками. В новой версии учту и уже буду проектировать изначально с учетом юникода. За подсказку спасибо  |