2012年11月13日 星期二

[OpenGL/C#] 在C#中使用OpenGL簡單的顯示文字

在C#開發OpenGL有使用CSGL等library方式來建立
在C++中要在OpenGL上顯示文字可以在網路上找到許多資料,
而C#雖然也有很多資料但是一直無法試成功,甚至會造成狂吃記憶體.
只是為了顯示簡單的文字,因此就使用C++的來改寫.

Step1.先將opengl32.dll複製到C#專案目錄或確定在\Windows\System32中有opengl32.dll
Step2.由opengl32.dll引入 wglUseFontBitmaps()與wglGetCurrentDC() 兩個函數
   [DllImport("opengl32.dll")]
        static extern System.Boolean wglUseFontBitmaps(System.IntPtr hdc, System.UInt32 first, System.UInt32 count, System.UInt32 listdbase);
        [DllImport("opengl32.dll")]
        static extern System.IntPtr wglGetCurrentDC();
Step3.撰寫以下函數,修改自(modified from:) http://blog.sina.com.cn/s/blog_9aa5c2d4010150sp.html
        void GLdrawString(string str)
        { //在OpenGL畫布上顯示文字
            int isFirstCall = 1;
            uint lists = 0;
            uint MAX_CHAR = 127;

            if (isFirstCall == 1)
            {
                isFirstCall = 0;
                lists = GL.glGenLists((int)MAX_CHAR);

                wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
            }
            char[] str_char = str.ToCharArray();
            for (int n = 0; n < str.Length; n++)
                GL.glCallList(lists + (uint)str_char[n]);
        }


code: http://goo.gl/PhjXI