вот я порылся по интернету исправил программу. но у людей пишут работает, у меня нет. выводит только английские буквы, русских на экране вобще не видно:
| Код | void CText3DDlg::OnPaint() {
// Light values and coordinates GLfloat whiteLight[] = { 0.4f, 0.4f, 0.4f, 1.0f }; GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8f, 1.0f }; GLfloat specular[] = { 0.9f, 0.9f, 0.9f, 1.0f}; //GLfloat lightPos[] = { -240.0f, 200.0f, 200.0f, 1.0f }; GLfloat lightPos[] = { -100.0f, 200.0f, 50.0f, 1.0f };
// Setup the Font characteristics HFONT hFont; GLYPHMETRICSFLOAT agmf[128]; // Throw away LOGFONT logfont;
logfont.lfHeight = -10; logfont.lfWidth = 0; logfont.lfEscapement = 0; logfont.lfOrientation = 0; logfont.lfWeight = FW_BOLD; logfont.lfItalic = FALSE; logfont.lfUnderline = FALSE; logfont.lfStrikeOut = FALSE; logfont.lfCharSet = RUSSIAN_CHARSET;//ANSI_CHARSET; logfont.lfOutPrecision = OUT_DEFAULT_PRECIS; logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS; logfont.lfQuality = DEFAULT_QUALITY; logfont.lfPitchAndFamily = DEFAULT_PITCH; strcpy(logfont.lfFaceName,"Arial"); // Create the font and display list hFont = CreateFontIndirect(&logfont); pDC->SelectObject (hFont);
//create display lists for glyphs 0 through 255 with 0.1 extrusion // and default deviation. The display list numbering starts at 1000 // (it could be any number). HDC hDC=pDC->GetSafeHdc(); GLuint fontbase = glGenLists(257); wglUseFontOutlines(hDC, 0, 128, fontbase, 0.0f, 0.1f, WGL_FONT_POLYGONS, agmf); //wglUseFontOutlines(hDC, 0, 128, GL_3D_FONT_LIST, 0.0f, 0.1f, // WGL_FONT_POLYGONS, agmf); DeleteObject(hFont);
glEnable(GL_DEPTH_TEST); // Hidden surface removal glEnable(GL_COLOR_MATERIAL);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0,GL_AMBIENT,whiteLight); glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight); glLightfv(GL_LIGHT0,GL_SPECULAR,specular); glLightfv(GL_LIGHT0,GL_POSITION,lightPos); glEnable(GL_LIGHT0);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT, GL_SPECULAR,specular); glMateriali(GL_FRONT,GL_SHININESS,128);
// Blue 3D Text glRGB(255, 0, 0);
// Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); glTranslatef(-1.0f,0.0 , -8.0f);
glMatrixMode(GL_MODELVIEW);
glListBase(fontbase); //glListBase(GL_3D_FONT_LIST); glPushMatrix();
glRotatef(6.0f, 1.0f, 0.0f, 0.0f); glRotatef(-50.0f, 0.0f, 1.0f, 0.0f);
char text[30]; sprintf(text,"%s","ÏðâèâåòHel"); //русские буквы в пределах 1040-1103
int n; n=strlen(text); BYTE *textbytes = new byte[n]; for (int i = 0; i < strlen(text); i++) { textbytes[i] = (byte)text[i];
if (text[i] > 1039 && text[i] < 1104) { textbytes[i] = (byte)(text[i] + 176); } else { textbytes[i] = (byte)text[i]; } }
glCallLists (10, GL_UNSIGNED_BYTE, textbytes); glPopMatrix();
SwapBuffers(wglGetCurrentDC());
if (IsIconic()) { CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } }
|
|