1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

вывод текста в Opengl C#

Тема в разделе ".NET", создана пользователем Villiya, 23 май 2010.

  1. Villiya

    Villiya Гость

    Уважаемые программисты, столкнулась с проблемой вывода текста в OpenGl C#, просмотрела много литературы, но ничего не помогает! использую VisualStudio2008+TaoFramework. имеется код
    Код (Text):
    public void glPrint(double x, double y, double z, string text)
    {
    Gl.glRasterPos3d(x, y, z);
    if (text == null || text.Length == 0)
    {
    return;
    }
    Gl.glPushAttrib(Gl.GL_LIST_BIT);
    Gl.glListBase(fontbase);
    byte[] textbytes = new byte[text.Length];
    for (int i = 0; i < text.Length; 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];
    }
    }
    Gl.glCallLists(text.Length, Gl.GL_UNSIGNED_BYTE, textbytes);
    Gl.glPopAttrib();
    }
    Код (Text):
     public bool SetWindowPixelFormat()
    {
    hDC = User.GetDC(AnT.Handle);// получаем контекст устройства

    //Glut.PI
    Gdi.PIXELFORMATDESCRIPTOR pixelDesc = new Gdi.PIXELFORMATDESCRIPTOR();


    pixelDesc.nSize = (short)Marshal.SizeOf(pixelDesc);
    pixelDesc.nVersion = 1;
    pixelDesc.dwFlags = Gdi.PFD_DRAW_TO_WINDOW | Gdi.PFD_SUPPORT_OPENGL | Gdi.PFD_DOUBLEBUFFER | Gdi.PFD_STEREO_DONTCARE;
    pixelDesc.iPixelType = (byte)Gdi.PFD_TYPE_RGBA;
    pixelDesc.cColorBits = 32;
    pixelDesc.cRedBits = 8;
    pixelDesc.cRedShift = 16;
    pixelDesc.cGreenBits = 8;
    pixelDesc.cGreenShift = 8;
    pixelDesc.cBlueBits = 8;
    pixelDesc.cBlueShift = 0;
    pixelDesc.cAlphaBits = 0;
    pixelDesc.cAlphaShift = 0;
    pixelDesc.cAccumBits = 64;
    pixelDesc.cAccumRedBits = 16;
    pixelDesc.cAccumGreenBits = 16;
    pixelDesc.cAccumBlueBits = 16;
    pixelDesc.cAccumAlphaBits = 0;
    pixelDesc.cDepthBits = 32;
    pixelDesc.cStencilBits = 8;
    pixelDesc.cAuxBuffers = 0;
    pixelDesc.iLayerType = Gdi.PFD_MAIN_PLANE;
    pixelDesc.bReserved = 0;
    pixelDesc.dwLayerMask = 0;
    pixelDesc.dwVisibleMask = 0;
    pixelDesc.dwDamageMask = 0;


    m_GLPixelIndex = Gdi.ChoosePixelFormat(hDC, ref pixelDesc);
    if (m_GLPixelIndex == 0) // Choose default
    {
    m_GLPixelIndex = 1;
    //if (Gdi.DescribePixelFormat(hDC, m_GLPixelIndex,
    //  pixelDesc.nSize, ref pixelDesc) == 0)
    return false;
    }


    if (!Gdi.SetPixelFormat(hDC, m_GLPixelIndex, ref pixelDesc))
    return false;

    return true;
    }



    private void CreateSymbols()
    {
    IntPtr font;                                                        // Windows Font ID
    IntPtr oldfont;
    fontbase = Gl.glGenLists(257);//Выделим место для 96 символов.

    font = Gdi.CreateFont(

    -24,//Высота фонта.
    0,//Ширина фонта.
    0,//Угол отношения.
    0,//Угол наклона.
    Gdi.FW_BOLD,//Ширина шрифта.
    false,//Курсив.
    false,//Подчеркивание.
    false,//Перечеркивание.
    Gdi.ANSI_CHARSET,//Идентификатор набора символов.
    Gdi.OUT_TT_PRECIS,//Точность вывода.
    Gdi.CLIP_DEFAULT_PRECIS,//Точность отсечения.
    Gdi.ANTIALIASED_QUALITY,//Качество вывода.
    Gdi.FF_DONTCARE | Gdi.DEFAULT_PITCH,//Семейство и шаг.
    "Arial"
    );//Имя шрифта.
    IntPtr hDC = Wgl.wglGetCurrentDC();
    oldfont = Gdi.SelectObject(hDC, font);//Выбрать шрифт, созданный нами.
    Wgl.wglUseFontBitmaps(hDC, 0, 256, fontbase);                     // Builds 96 Characters Starting At Character 32
    Gdi.SelectObject(hDC, oldfont);                                  // Selects The Font We Want
    Gdi.DeleteObject(font);                                          // Delete The Font
    }
    в результате вызова функции glPrint на экране ничего не отображается, подскажите в чем проблема! пожалуйста!
     
  2. mr_ST

    mr_ST Гость

    1) Из кода непонятно как задается матрица проекции, viewport и положение наблюдателя (камеры)
    2) Я бы посоветовал OpenTK вместо Tao. Там вопрос с выводом текста решен гораздо лучше чем позволяет базовый API OpenGL, да и примеры есть.
     
Загрузка...

Поделиться этой страницей