2013-03-13 96 views
1

我對將紋理/頂點應用變換(我是OpenGL學習者)有個疑問。我遇到了使用SharpGL的DrawText功能的情況。您可以指定X和Y座標,但我想旋轉文本以使其垂直定向。該功能雖然沒有采取任何角度。 SharpGL寫入文本的方式是獲得一組寫入屏幕的位圖。OpenGL旋轉已經彈出的東西

無論我嘗試什麼,我的文字總是出現水平。

gl.DrawText函數執行以下操作(我挖入源代碼)。

gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PushMatrix(); gl.LoadIdentity();

 int[] viewport = new int[4]; 
     gl.GetInteger(OpenGL.GL_VIEWPORT, viewport); 
     gl.Ortho(0, width, 0, height, -1, 1); 

     // Create the appropriate modelview matrix. 
     gl.MatrixMode(OpenGL.GL_MODELVIEW); 
     gl.PushMatrix(); 
     gl.LoadIdentity(); 
     gl.Color(r, g, b); 
     gl.RasterPos(x, y); 

     gl.PushAttrib(OpenGL.GL_LIST_BIT | OpenGL.GL_CURRENT_BIT | 
      OpenGL.GL_ENABLE_BIT | OpenGL.GL_TRANSFORM_BIT); 
     gl.Color(r, g, b); 
     gl.Disable(OpenGL.GL_LIGHTING); 
     gl.Disable(OpenGL.GL_TEXTURE_2D); 
     gl.Disable(OpenGL.GL_DEPTH_TEST); 
     gl.RasterPos(x, y); 

     // Set the list base. 
     gl.ListBase(fontBitmapEntry.ListBase); 

     // Create an array of lists for the glyphs. 
     var lists = text.Select(c => (byte) c).ToArray(); 

     // Call the lists for the string. 
     gl.CallLists(lists.Length, lists); 
     gl.Flush(); 

有沒有一種方法,我可以改造調用適用於已經取得並有關聯矩陣彈出任何繪圖?

回答

3

如果SharpGL在幕後使用glBitmap(),則必須將文本渲染到紋理(glReadPixels()/PBO/FBO),然後使用該紋理渲染(旋轉)四邊形。

+0

您是否熟悉Windows wglUseFontBitmaps函數?這是一個Windows圖形庫擴展。看來SharpGL正在調用它來在顯示列表中創建位圖,然後通過調用CallLists來觸發它。根據MSDN的說法,它在後臺調用glBitmap。所以我會做一個glReadPixels並旋轉?如果它與某些事物重疊會發生什麼?如果我構建了一個優雅的場景,它可以讀取我不想要的東西嗎? – 2013-03-14 01:12:01

+0

如果你使用'glReadPixels()'路由,當你的framebuffer爲空時,你通常需要在你的初始'glClear()'後渲染你的字符串,然後在繪製你的場景之前發出另一個'glClear()'。這樣你就不會無意中拾取任何場景的顏色。 – genpfault 2013-03-14 17:25:03