Я отображаю текст в C# приложении WinForms с использованием OpenTK. Весь текст горизонтальный, и все работает правильно.
Вот соответствующие части моего кода:
Функция для построения списков отображения:
public void BuildCharacterLists(bool bBold, ref int nCharacterBuildList, int nWeight, string szFont, TEXT_TYPE textType, float extrusionForNonBitmapTextType_ignoredForBitmapType)
{
if (nCharacterBuildList != -1)
{
GL.DeleteLists(nCharacterBuildList, 96);
}
IntPtr font;
IntPtr oldfont;
IntPtr hDC = Wgl.wglGetCurrentDC();
nCharacterBuildList = GL.GenLists(96);
font = Gdi.CreateFont(nWeight, // Height Of Font
0, // Width Of Font
0, // Angle Of Escapement
0, // Orientation Angle
(bBold ? Gdi.FW_BOLD : 200), // Font Weight
false, // Italic
false, // Underline
false, // Strikeout
Gdi.ANSI_CHARSET, // Character Set Identifier
Gdi.OUT_TT_PRECIS, // Output Precision
Gdi.CLIP_DEFAULT_PRECIS, // Clipping Precision
Gdi.ANTIALIASED_QUALITY, // Output Quality
Gdi.FF_DONTCARE | Gdi.DEFAULT_PITCH, // Family And Pitch
"Arial"); // Font Name
oldfont = Gdi.SelectObject(hDC, font); // Selects The Font We Want
if (textType == TEXT_TYPE.BITMAP) // Builds 96 Characters Starting At Character 32
{
Wgl.wglUseFontBitmapsA(hDC, 32, 96, nCharacterBuildList);
}
Gdi.SelectObject(hDC, oldfont);
Gdi.DeleteObject(font);
}
Выдержка из функции для визуализировать текст:
GL.RasterPos2 (modelX, modelY);
GL.PushAttrib(AttribMask.ListBit); // Pushes The Display List Bits
GL.ListBase(m_nCharacterBitmapBuildList - 32); // Sets The Base Character to 32
byte[] textbytes = new byte[szText.Length];
for (int i = 0; i < szText.Length; i++)
{
textbytes[i] = (byte)szText[i];
}
GL.CallLists(szText.Length, ListNameType.UnsignedByte, textbytes); // Draws The Display List Text
if (bCentred)
{
screenX += 5 * stringLength / 2;
}
GL.PopAttrib();
Это все работает нормально, если я рендеринг, например, заглавная буква HI получит:
![H1](https://i.stack.imgur.com/YW8Ih.png)
Но если я начну изменять угол выхода шрифта при вызове CreateFont, персонаж начнет обрезать, как показано ниже:
Угол спуска 450 дает:
![H2](https://i.stack.imgur.com/mPJHL.png)
Угол спуска 600 дает:
![H3](https://i.stack.imgur.com/8RdJd.png)
Угол спуска 900 (что я хочу, вертикальный), тогда изображение полностью обрезается.
Я прочитал множество ссылок по этому поводу, но был удивлен, обнаружив, что, возможно, есть нет решения?
(Пока я прибегаю к использованию wglUseFontOutlinesA, но постоянный размер текста более сложен). * 10 40 *
Вращение работает (как показывают скриншоты), но отсечение убивает вещи.
Кто-нибудь может посоветовать?