Search code examples
c#openglarcgis

wglUseFontBitmaps is not drawing on screen


I've posted this question in gis.stackexchange earlier but I'm not sure if that was in fact the right place to post it, since this is more of a coding/technical question. I'm attempting to draw a character in 3D Space. However, nothing seems to place the character on the screen.

Below is what I'm attempting to do in code: Anyone have any ideas? I'm beyond lost at this point and will admit that I know next to nothing about openGL

double outX = 0;
double outY = 0;
double outZ = 0;

//This allows ArcGlobe to convert a lat lon into a 3D Coordinate system between -1 and 1
myGlobeViewUtil.GeographictoGeocentric(0 ,0 ,0 , out outX , out outY , out outZ);

Font font = new Font("Courier New" , 32.0f , FontStyle.Bold);
uint dbase = GL.genLists(256);
wglUseFontBitmaps(this.Handle, 32, 256 , dbase);

GL.glLoadIdentity();
GL.glTranslatef(0.0f , 0.0f , -1.0f);

GL.glColor3f(1.0f , 0.0f , 0.0f);
GL.glRasterPos3d(geoX , geoY , geoZ);
GLPrint("TEST");



private void GLPrint(string inText)
{
  GL.glPushAttrib(GL.GL_LIST_BIT);
  GL.glListBase(dbase -32);
  GL.glCallLists(text.length , GL.GL_UNSIGNED_SHORT , text);
  GL.glPopattrib();
}

EDIT: Due to pre-existing requirements I must use CsGL http://csgl.sourceforge.net/


Solution

  • Finally now it works!

    public class OurView : OpenGLControl
    {
        readonly GDITextureFont _myGDITextureFont = new GDITextureFont(new Font("Courier New", 32.0f, FontStyle.Bold));
    
        public override void glDraw()
        {
            OpenGL.glClear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);    // Clear Screen And Depth Buffer
    
            OpenGL.glLoadIdentity();
            OpenGL.glTranslated(0, 0, -1000); // !!!
            OpenGL.glRotated(35, 1, 1.2, 0.2);
            OpenGL.glScaled(2, 2, 2);
    
            OpenGL.glPushMatrix();
            OpenGL.glColor3f(1, 1, 0);
            OpenGL.glTranslated(-20, -10, 100);
    
            _myGDITextureFont.DrawString("Working!");
            OpenGL.glPopMatrix();
    
        }
        protected override void OnSizeChanged(EventArgs e)
        {
            base.OnSizeChanged(e);
    
            Size s = Size;
            double aspect_ratio = (double)s.Width / (double)s.Height;
    
            OpenGL.glMatrixMode(GL.GL_PROJECTION);
            OpenGL.glLoadIdentity();
    
            // special frustum, to have nice font display
            OpenGL.glFrustum(-s.Width, s.Width, -s.Height, s.Height, 700, 1300);
    
            OpenGL.glMatrixMode(OpenGL.GL_MODELVIEW);
            OpenGL.glLoadIdentity();
        }
    }
    

    Complete working example: http://cl.ly/2Z2m0A2v2U3p1j1m1p00