2012-06-19 38 views
0

我需要在OpenGL場景上繪製二維疊加。 OpenGL的用於二維動畫,只是繪製在正交投影紋理2D矩形,這是繪製代碼:在OpenGL窗口中繪製二維疊加(文本+圖標)

 
// viewport is set to the whole window client area 
// m_fRectX, m_fRectY are computed in OnSize and define 
// sub-rectangle for image drawing 
// m_nImageWidth, m_nImageHeight are texture dimensions 

glClear(GL_COLOR_BUFFER_BIT); 
glEnable(GL_TEXTURE_RECTANGLE_ARB); 
glBegin(GL_TRIANGLE_STRIP); 

glTexCoord2d(0.0f, (float)m_nImageHeight); 
glVertex2d(-m_fRectX, -m_fRectY); 
glTexCoord2d((float)m_nImageWidth, (float)m_nImageHeight); 
glVertex2d(+m_fRectX, -m_fRectY); 
glTexCoord2d(0.0f, 0.0f); 
glVertex2d(-m_fRectX, +m_fRectY); 
glTexCoord2d((float)m_nImageWidth, 0.0f); 
glVertex2d(+m_fRectX, +m_fRectY); 

glEnd(); 
SwapBuffers(m_hDC); 

我的要求:

  1. 性能是至關重要的

  2. 允許使用Windows特定的API。

  3. 需要文本和圖像疊加(圖標樣式)。

  4. 定義覆蓋位置和大小的唯一因素是窗口客戶區大小(在我的情況下,它等於OpenGL視口)。

什麼技術適用於這種情況?

+1

你的研究出現了什麼和/或你到目前爲止嘗試過什麼? – Ani

+0

你是什麼意思的「覆蓋」?這不就是在你已經繪製的場景上繪製更多東西嗎? –

+0

@Nicol Bolas - 是的,這就是我的意思。 –

回答

3

使用OpenGL繪製文本的最高性能方式是使用Bitmap fonts。這使用很少的紋理映射四邊形來渲染文本。它也有一些缺點。這種渲染使得難以(but not impossible)從字體紋理烘焙的分辨率向上擴展。我喜歡並使用AngelCode's Bitmap Font generator,但是有很多這樣的工具。你可以選擇一個適合你的需求。

另一種選擇是使用Outline fonts。這可以上下調整大小而不損失質量,但使用wglUseFontOutlines

第三個也是最難的(但質量最好的那個)會自己渲染文本。微軟研究院的論文提供了一些非常酷的技術來在GPU上渲染矢量圖。 This GPU Gems文章向我們展示瞭如何。

性能,複雜性和質量之間有很多折衷。在決定使用其中一個之前,瞭解每個人的利弊非常重要。