1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. Villiya

    Villiya Гость

    Репутация:
    0
    Уважаемые программисты, столкнулась с проблемой вывода текста в OpenGl C#, просмотрела много литературы, но ничего не помогает! использую VisualStudio2008+TaoFramework. имеется код
    Код:
    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();
    }
    Код:
     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 Гость

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

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