OpenGL 字体颜色问题
生活随笔
收集整理的這篇文章主要介紹了
OpenGL 字体颜色问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
剛寫(xiě)了一個(gè)OpenGL字體顯示類, 發(fā)現(xiàn)顏色總是不對(duì), 部分代碼如下:
????//繪制文字????glPushAttrib(GL_LIST_BIT?|?GL_COLOR_BUFFER_BIT?|?GL_ENABLE_BIT);
????glDisable(GL_LIGHTING);
????//文字位置
????if(m_screen)
????{
????????double?x=m_x,y=m_y;
????????switch(m_layout)
????????{
????????case(LEFT_BOTTOM):break;
????????case(LEFT_TOP):///左上角
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(RIGHT_BOTTOM):///右下角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????break;
????????case(RIGHT_TOP):///右上角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(LEFT_CENTER):///左側(cè)中心
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(TOP_CENTER):///頂部中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(BOTTOM_CENTER):///底部中性
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????break;
????????case(RIGHT_CENTER):///右側(cè)中心
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(CENTER):///屏幕中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????}
????????glWindowPos2d(x,y);
????}
????else
????????glRasterPos3d(m_x,m_y,m_z);
????
????//文字顏色,必須在glWindowPos2d和glRasterPos3d前
????glColor4fv(Color);?//<------
????//調(diào)用顯示列表
????glListBase(m_base);
????glCallLists(m_list_len,GL_UNSIGNED_INT,m_lists);
????glPopAttrib();
?
百思不得其解, 翻開(kāi)Red Book找到了答案:
? 8.1.3 選擇位圖的顏色
? ... 光柵顏色狀態(tài)變量被設(shè)置為調(diào)用函數(shù)glRasterPos*()時(shí)的顏色, ...
?
顯然只需要調(diào)整glColor*和 glRasterPos*的位置即可, 修改后的代碼如下:
????glPushAttrib(GL_LIST_BIT?|?GL_COLOR_BUFFER_BIT?|?GL_ENABLE_BIT);
????glDisable(GL_LIGHTING);
????//文字顏色,必須在glWindowPos2d和glRasterPos3d前
????glColor4fv(Color);
????//文字位置
????if(m_screen)
????{
????????double?x=m_x,y=m_y;
????????switch(m_layout)
????????{
????????case(LEFT_BOTTOM):break;
????????case(LEFT_TOP):///左上角
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(RIGHT_BOTTOM):///右下角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????break;
????????case(RIGHT_TOP):///右上角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(LEFT_CENTER):///左側(cè)中心
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(TOP_CENTER):///頂部中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(BOTTOM_CENTER):///底部中性
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????break;
????????case(RIGHT_CENTER):///右側(cè)中心
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(CENTER):///屏幕中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????}
????????glWindowPos2d(x,y);
????}
????else
????????glRasterPos3d(m_x,m_y,m_z);
????//調(diào)用顯示列表
????glListBase(m_base);
????glCallLists(m_list_len,GL_UNSIGNED_INT,m_lists);
????glPopAttrib();
轉(zhuǎn)載于:https://www.cnblogs.com/codezhang/archive/2009/06/20/1507320.html
總結(jié)
以上是生活随笔為你收集整理的OpenGL 字体颜色问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GridView分页(第一页、上一页、下
- 下一篇: 网络存储导论第七章:重要系统灾备方法